Ruby 3.2.0dev (2022-06-11 revision 0e2c01bd094617f5c82759bdab03bb786ce89d56)
rb_mjit_min_header-3.1.0.h
1#ifdef __GNUC__
2# pragma GCC system_header
3#endif
4#define ALWAYS_INLINE(x) __attribute__ ((__always_inline__)) x
5typedef __builtin_va_list __gnuc_va_list;
6typedef __gnuc_va_list va_list;
7
8typedef long unsigned int size_t;
9typedef unsigned char __u_char;
10typedef unsigned short int __u_short;
11typedef unsigned int __u_int;
12typedef unsigned long int __u_long;
13typedef signed char __int8_t;
14typedef unsigned char __uint8_t;
15typedef signed short int __int16_t;
16typedef unsigned short int __uint16_t;
17typedef signed int __int32_t;
18typedef unsigned int __uint32_t;
19typedef signed long int __int64_t;
20typedef unsigned long int __uint64_t;
21typedef __int8_t __int_least8_t;
22typedef __uint8_t __uint_least8_t;
23typedef __int16_t __int_least16_t;
24typedef __uint16_t __uint_least16_t;
25typedef __int32_t __int_least32_t;
26typedef __uint32_t __uint_least32_t;
27typedef __int64_t __int_least64_t;
28typedef __uint64_t __uint_least64_t;
29typedef long int __quad_t;
30typedef unsigned long int __u_quad_t;
31typedef long int __intmax_t;
32typedef unsigned long int __uintmax_t;
33typedef unsigned long int __dev_t;
34typedef unsigned int __uid_t;
35typedef unsigned int __gid_t;
36typedef unsigned long int __ino_t;
37typedef unsigned long int __ino64_t;
38typedef unsigned int __mode_t;
39typedef unsigned long int __nlink_t;
40typedef long int __off_t;
41typedef long int __off64_t;
42typedef int __pid_t;
43typedef struct { int __val[2]; } __fsid_t;
44typedef long int __clock_t;
45typedef unsigned long int __rlim_t;
46typedef unsigned long int __rlim64_t;
47typedef unsigned int __id_t;
48typedef long int __time_t;
49typedef unsigned int __useconds_t;
50typedef long int __suseconds_t;
51typedef long int __suseconds64_t;
52typedef int __daddr_t;
53typedef int __key_t;
54typedef int __clockid_t;
55typedef void * __timer_t;
56typedef long int __blksize_t;
57typedef long int __blkcnt_t;
58typedef long int __blkcnt64_t;
59typedef unsigned long int __fsblkcnt_t;
60typedef unsigned long int __fsblkcnt64_t;
61typedef unsigned long int __fsfilcnt_t;
62typedef unsigned long int __fsfilcnt64_t;
63typedef long int __fsword_t;
64typedef long int __ssize_t;
65typedef long int __syscall_slong_t;
66typedef unsigned long int __syscall_ulong_t;
67typedef __off64_t __loff_t;
68typedef char *__caddr_t;
69typedef long int __intptr_t;
70typedef unsigned int __socklen_t;
71typedef int __sig_atomic_t;
72typedef struct
73{
74 int __count;
75 union
76 {
77 unsigned int __wch;
78 char __wchb[4];
79 } __value;
81typedef struct _G_fpos_t
82{
83 __off_t __pos;
84 __mbstate_t __state;
85} __fpos_t;
86typedef struct _G_fpos64_t
87{
88 __off64_t __pos;
89 __mbstate_t __state;
91struct _IO_FILE;
92typedef struct _IO_FILE __FILE;
93struct _IO_FILE;
94typedef struct _IO_FILE FILE;
95struct _IO_FILE;
96struct _IO_marker;
97struct _IO_codecvt;
98struct _IO_wide_data;
99typedef void _IO_lock_t;
100struct _IO_FILE
101{
102 int _flags;
103 char *_IO_read_ptr;
104 char *_IO_read_end;
105 char *_IO_read_base;
106 char *_IO_write_base;
107 char *_IO_write_ptr;
108 char *_IO_write_end;
109 char *_IO_buf_base;
110 char *_IO_buf_end;
111 char *_IO_save_base;
112 char *_IO_backup_base;
113 char *_IO_save_end;
114 struct _IO_marker *_markers;
115 struct _IO_FILE *_chain;
116 int _fileno;
117 int _flags2;
118 __off_t _old_offset;
119 unsigned short _cur_column;
120 signed char _vtable_offset;
121 char _shortbuf[1];
122 _IO_lock_t *_lock;
123 __off64_t _offset;
124 struct _IO_codecvt *_codecvt;
125 struct _IO_wide_data *_wide_data;
126 struct _IO_FILE *_freeres_list;
127 void *_freeres_buf;
128 size_t __pad5;
129 int _mode;
130 char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
131};
132typedef __ssize_t cookie_read_function_t (void *__cookie, char *__buf,
133 size_t __nbytes);
134typedef __ssize_t cookie_write_function_t (void *__cookie, const char *__buf,
135 size_t __nbytes);
136typedef int cookie_seek_function_t (void *__cookie, __off64_t *__pos, int __w);
137typedef int cookie_close_function_t (void *__cookie);
138typedef struct _IO_cookie_io_functions_t
139{
140 cookie_read_function_t *read;
141 cookie_write_function_t *write;
142 cookie_seek_function_t *seek;
143 cookie_close_function_t *close;
145typedef __off_t off_t;
146typedef __off64_t off64_t;
147typedef __ssize_t ssize_t;
148typedef __fpos_t fpos_t;
149typedef __fpos64_t fpos64_t;
150extern FILE *stdin;
151extern FILE *stdout;
152extern FILE *stderr;
153extern int remove (const char *__filename) __attribute__ ((__nothrow__ , __leaf__));
154extern int rename (const char *__old, const char *__new) __attribute__ ((__nothrow__ , __leaf__));
155extern int renameat (int __oldfd, const char *__old, int __newfd,
156 const char *__new) __attribute__ ((__nothrow__ , __leaf__));
157extern int renameat2 (int __oldfd, const char *__old, int __newfd,
158 const char *__new, unsigned int __flags) __attribute__ ((__nothrow__ , __leaf__));
159extern FILE *tmpfile (void) __attribute__ ((__warn_unused_result__));
160extern FILE *tmpfile64 (void) __attribute__ ((__warn_unused_result__));
161extern char *tmpnam (char *__s) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
162extern char *tmpnam_r (char *__s) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
163extern char *tempnam (const char *__dir, const char *__pfx)
164 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
165extern int fclose (FILE *__stream);
166extern int fflush (FILE *__stream);
167extern int fflush_unlocked (FILE *__stream);
168extern int fcloseall (void);
169extern FILE *fopen (const char *__restrict __filename,
170 const char *__restrict __modes) __attribute__ ((__warn_unused_result__));
171extern FILE *freopen (const char *__restrict __filename,
172 const char *__restrict __modes,
173 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
174extern FILE *fopen64 (const char *__restrict __filename,
175 const char *__restrict __modes) __attribute__ ((__warn_unused_result__));
176extern FILE *freopen64 (const char *__restrict __filename,
177 const char *__restrict __modes,
178 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
179extern FILE *fdopen (int __fd, const char *__modes) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
180extern FILE *fopencookie (void *__restrict __magic_cookie,
181 const char *__restrict __modes,
182 cookie_io_functions_t __io_funcs) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
183extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
184 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
185extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
186extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));
187extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
188 int __modes, size_t __n) __attribute__ ((__nothrow__ , __leaf__));
189extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
190 size_t __size) __attribute__ ((__nothrow__ , __leaf__));
191extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
192extern int fprintf (FILE *__restrict __stream,
193 const char *__restrict __format, ...);
194extern int printf (const char *__restrict __format, ...);
195extern int sprintf (char *__restrict __s,
196 const char *__restrict __format, ...) __attribute__ ((__nothrow__));
197extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
198 __gnuc_va_list __arg);
199extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
200extern int vsprintf (char *__restrict __s, const char *__restrict __format,
201 __gnuc_va_list __arg) __attribute__ ((__nothrow__));
202extern int snprintf (char *__restrict __s, size_t __maxlen,
203 const char *__restrict __format, ...)
204 __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));
205extern int vsnprintf (char *__restrict __s, size_t __maxlen,
206 const char *__restrict __format, __gnuc_va_list __arg)
207 __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0)));
208extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
209 __gnuc_va_list __arg)
210 __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 0))) __attribute__ ((__warn_unused_result__));
211extern int __asprintf (char **__restrict __ptr,
212 const char *__restrict __fmt, ...)
213 __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));
214extern int asprintf (char **__restrict __ptr,
215 const char *__restrict __fmt, ...)
216 __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));
217extern int vdprintf (int __fd, const char *__restrict __fmt,
218 __gnuc_va_list __arg)
219 __attribute__ ((__format__ (__printf__, 2, 0)));
220extern int dprintf (int __fd, const char *__restrict __fmt, ...)
221 __attribute__ ((__format__ (__printf__, 2, 3)));
222extern int fscanf (FILE *__restrict __stream,
223 const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));
224extern int scanf (const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));
225extern int sscanf (const char *__restrict __s,
226 const char *__restrict __format, ...) __attribute__ ((__nothrow__ , __leaf__));
227extern int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) __asm__ ("" "__isoc99_fscanf") __attribute__ ((__warn_unused_result__));
228extern int scanf (const char *__restrict __format, ...) __asm__ ("" "__isoc99_scanf") __attribute__ ((__warn_unused_result__));
229extern int sscanf (const char *__restrict __s, const char *__restrict __format, ...) __asm__ ("" "__isoc99_sscanf") __attribute__ ((__nothrow__ , __leaf__));
230extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
231 __gnuc_va_list __arg)
232 __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__));
233extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
234 __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__));
235extern int vsscanf (const char *__restrict __s,
236 const char *__restrict __format, __gnuc_va_list __arg)
237 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__scanf__, 2, 0)));
238extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vfscanf")
239 __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__));
240extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vscanf")
241 __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__));
242extern int vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vsscanf") __attribute__ ((__nothrow__ , __leaf__))
243 __attribute__ ((__format__ (__scanf__, 2, 0)));
244extern int fgetc (FILE *__stream);
245extern int getc (FILE *__stream);
246extern int getchar (void);
247extern int getc_unlocked (FILE *__stream);
248extern int getchar_unlocked (void);
249extern int fgetc_unlocked (FILE *__stream);
250extern int fputc (int __c, FILE *__stream);
251extern int putc (int __c, FILE *__stream);
252extern int putchar (int __c);
253extern int fputc_unlocked (int __c, FILE *__stream);
254extern int putc_unlocked (int __c, FILE *__stream);
255extern int putchar_unlocked (int __c);
256extern int getw (FILE *__stream);
257extern int putw (int __w, FILE *__stream);
258extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
259 __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2)));
260extern char *fgets_unlocked (char *__restrict __s, int __n,
261 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__))
262 __attribute__ ((__access__ (__write_only__, 1, 2)));
263extern __ssize_t __getdelim (char **__restrict __lineptr,
264 size_t *__restrict __n, int __delimiter,
265 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
266extern __ssize_t getdelim (char **__restrict __lineptr,
267 size_t *__restrict __n, int __delimiter,
268 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
269extern __ssize_t getline (char **__restrict __lineptr,
270 size_t *__restrict __n,
271 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
272extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
273extern int puts (const char *__s);
274extern int ungetc (int __c, FILE *__stream);
275extern size_t fread (void *__restrict __ptr, size_t __size,
276 size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
277extern size_t fwrite (const void *__restrict __ptr, size_t __size,
278 size_t __n, FILE *__restrict __s);
279extern int fputs_unlocked (const char *__restrict __s,
280 FILE *__restrict __stream);
281extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
282 size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
283extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
284 size_t __n, FILE *__restrict __stream);
285extern int fseek (FILE *__stream, long int __off, int __whence);
286extern long int ftell (FILE *__stream) __attribute__ ((__warn_unused_result__));
287extern void rewind (FILE *__stream);
288extern int fseeko (FILE *__stream, __off_t __off, int __whence);
289extern __off_t ftello (FILE *__stream) __attribute__ ((__warn_unused_result__));
290extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
291extern int fsetpos (FILE *__stream, const fpos_t *__pos);
292extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
293extern __off64_t ftello64 (FILE *__stream) __attribute__ ((__warn_unused_result__));
294extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
295extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);
296extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
297extern int feof (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
298extern int ferror (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
299extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
300extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
301extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
302extern void perror (const char *__s);
303extern int fileno (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
304extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
305extern FILE *popen (const char *__command, const char *__modes) __attribute__ ((__warn_unused_result__));
306extern int pclose (FILE *__stream);
307extern char *ctermid (char *__s) __attribute__ ((__nothrow__ , __leaf__));
308extern char *cuserid (char *__s);
309struct obstack;
310extern int obstack_printf (struct obstack *__restrict __obstack,
311 const char *__restrict __format, ...)
312 __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3)));
313extern int obstack_vprintf (struct obstack *__restrict __obstack,
314 const char *__restrict __format,
315 __gnuc_va_list __args)
316 __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 0)));
317extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
318extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
319extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
320extern int __uflow (FILE *);
321extern int __overflow (FILE *, int);
322extern __inline __attribute__ ((__gnu_inline__)) int
323getchar (void)
324{
325 return getc (stdin);
326}
327extern __inline __attribute__ ((__gnu_inline__)) int
328fgetc_unlocked (FILE *__fp)
329{
330 return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
331}
332extern __inline __attribute__ ((__gnu_inline__)) int
333getc_unlocked (FILE *__fp)
334{
335 return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
336}
337extern __inline __attribute__ ((__gnu_inline__)) int
338getchar_unlocked (void)
339{
340 return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
341}
342extern __inline __attribute__ ((__gnu_inline__)) int
343putchar (int __c)
344{
345 return putc (__c, stdout);
346}
347extern __inline __attribute__ ((__gnu_inline__)) int
348fputc_unlocked (int __c, FILE *__stream)
349{
350 return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
351}
352extern __inline __attribute__ ((__gnu_inline__)) int
353putc_unlocked (int __c, FILE *__stream)
354{
355 return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
356}
357extern __inline __attribute__ ((__gnu_inline__)) int
358putchar_unlocked (int __c)
359{
360 return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
361}
362extern __inline __attribute__ ((__gnu_inline__)) __ssize_t
363getline (char **__lineptr, size_t *__n, FILE *__stream)
364{
365 return __getdelim (__lineptr, __n, '\n', __stream);
366}
367extern __inline __attribute__ ((__gnu_inline__)) int
368__attribute__ ((__nothrow__ , __leaf__)) feof_unlocked (FILE *__stream)
369{
370 return (((__stream)->_flags & 0x0010) != 0);
371}
372extern __inline __attribute__ ((__gnu_inline__)) int
373__attribute__ ((__nothrow__ , __leaf__)) ferror_unlocked (FILE *__stream)
374{
375 return (((__stream)->_flags & 0x0020) != 0);
376}
377extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
378 const char *__restrict __format, ...) __attribute__ ((__nothrow__ , __leaf__))
379 __attribute__ ((__access__ (__write_only__, 1, 3)));
380extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
381 const char *__restrict __format,
382 __gnuc_va_list __ap) __attribute__ ((__nothrow__ , __leaf__))
383 __attribute__ ((__access__ (__write_only__, 1, 3)));
384extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
385__attribute__ ((__nothrow__ , __leaf__)) sprintf (char *__restrict __s, const char *__restrict __fmt, ...)
386{
387 return __builtin___sprintf_chk (__s, 2 - 1,
388 __builtin_object_size (__s, 2 > 1), __fmt,
389 __builtin_va_arg_pack ());
390}
391extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
392__attribute__ ((__nothrow__ , __leaf__)) vsprintf (char *__restrict __s, const char *__restrict __fmt, __gnuc_va_list __ap)
393{
394 return __builtin___vsprintf_chk (__s, 2 - 1,
395 __builtin_object_size (__s, 2 > 1), __fmt, __ap);
396}
397extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,
398 size_t __slen, const char *__restrict __format,
399 ...) __attribute__ ((__nothrow__ , __leaf__))
400 __attribute__ ((__access__ (__write_only__, 1, 2)));
401extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
402 size_t __slen, const char *__restrict __format,
403 __gnuc_va_list __ap) __attribute__ ((__nothrow__ , __leaf__));
404extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
405__attribute__ ((__nothrow__ , __leaf__)) snprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, ...)
406{
407 return __builtin___snprintf_chk (__s, __n, 2 - 1,
408 __builtin_object_size (__s, 2 > 1), __fmt,
409 __builtin_va_arg_pack ());
410}
411extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
412__attribute__ ((__nothrow__ , __leaf__)) vsnprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, __gnuc_va_list __ap)
413{
414 return __builtin___vsnprintf_chk (__s, __n, 2 - 1,
415 __builtin_object_size (__s, 2 > 1), __fmt, __ap);
416}
417extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
418 const char *__restrict __format, ...);
419extern int __printf_chk (int __flag, const char *__restrict __format, ...);
420extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
421 const char *__restrict __format, __gnuc_va_list __ap);
422extern int __vprintf_chk (int __flag, const char *__restrict __format,
423 __gnuc_va_list __ap);
424extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
425fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)
426{
427 return __fprintf_chk (__stream, 2 - 1, __fmt,
428 __builtin_va_arg_pack ());
429}
430extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
431printf (const char *__restrict __fmt, ...)
432{
433 return __printf_chk (2 - 1, __fmt, __builtin_va_arg_pack ());
434}
435extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
436vprintf (const char *__restrict __fmt, __gnuc_va_list __ap)
437{
438 return __vfprintf_chk (stdout, 2 - 1, __fmt, __ap);
439}
440extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
441vfprintf (FILE *__restrict __stream,
442 const char *__restrict __fmt, __gnuc_va_list __ap)
443{
444 return __vfprintf_chk (__stream, 2 - 1, __fmt, __ap);
445}
446extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,
447 ...) __attribute__ ((__format__ (__printf__, 3, 4)));
448extern int __vdprintf_chk (int __fd, int __flag,
449 const char *__restrict __fmt, __gnuc_va_list __arg)
450 __attribute__ ((__format__ (__printf__, 3, 0)));
451extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
452dprintf (int __fd, const char *__restrict __fmt, ...)
453{
454 return __dprintf_chk (__fd, 2 - 1, __fmt,
455 __builtin_va_arg_pack ());
456}
457extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
458vdprintf (int __fd, const char *__restrict __fmt, __gnuc_va_list __ap)
459{
460 return __vdprintf_chk (__fd, 2 - 1, __fmt, __ap);
461}
462extern int __asprintf_chk (char **__restrict __ptr, int __flag,
463 const char *__restrict __fmt, ...)
464 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__printf__, 3, 4))) __attribute__ ((__warn_unused_result__));
465extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
466 const char *__restrict __fmt, __gnuc_va_list __arg)
467 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__printf__, 3, 0))) __attribute__ ((__warn_unused_result__));
468extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
469 int __flag, const char *__restrict __format,
470 ...)
471 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__printf__, 3, 4)));
472extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,
473 int __flag,
474 const char *__restrict __format,
475 __gnuc_va_list __args)
476 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__printf__, 3, 0)));
477extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
478__attribute__ ((__nothrow__ , __leaf__)) asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...)
479{
480 return __asprintf_chk (__ptr, 2 - 1, __fmt,
481 __builtin_va_arg_pack ());
482}
483extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
484__attribute__ ((__nothrow__ , __leaf__)) __asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...)
485{
486 return __asprintf_chk (__ptr, 2 - 1, __fmt,
487 __builtin_va_arg_pack ());
488}
489extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
490__attribute__ ((__nothrow__ , __leaf__)) obstack_printf (struct obstack *__restrict __obstack, const char *__restrict __fmt, ...)
491{
492 return __obstack_printf_chk (__obstack, 2 - 1, __fmt,
493 __builtin_va_arg_pack ());
494}
495extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
496__attribute__ ((__nothrow__ , __leaf__)) vasprintf (char **__restrict __ptr, const char *__restrict __fmt, __gnuc_va_list __ap)
497{
498 return __vasprintf_chk (__ptr, 2 - 1, __fmt, __ap);
499}
500extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
501__attribute__ ((__nothrow__ , __leaf__)) obstack_vprintf (struct obstack *__restrict __obstack, const char *__restrict __fmt, __gnuc_va_list __ap)
502{
503 return __obstack_vprintf_chk (__obstack, 2 - 1, __fmt,
504 __ap);
505}
506extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
507 FILE *__restrict __stream)
508 __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 3)));
509extern char *__fgets_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets")
510 __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2)));
511extern char *__fgets_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_chk")
512 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets called with bigger size than length " "of destination buffer")));
513extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))) char *
514fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
515{
516 if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
517 {
518 if (!__builtin_constant_p (__n) || __n <= 0)
519 return __fgets_chk (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
520 if ((size_t) __n > __builtin_object_size (__s, 2 > 1))
521 return __fgets_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
522 }
523 return __fgets_alias (__s, __n, __stream);
524}
525extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen,
526 size_t __size, size_t __n,
527 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
528extern size_t __fread_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread") __attribute__ ((__warn_unused_result__));
529extern size_t __fread_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_chk")
530 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread called with bigger size * nmemb than length " "of destination buffer")));
531extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
532fread (void *__restrict __ptr, size_t __size, size_t __n,
533 FILE *__restrict __stream)
534{
535 if (__builtin_object_size (__ptr, 0) != (size_t) -1)
536 {
537 if (!__builtin_constant_p (__size)
538 || !__builtin_constant_p (__n)
539 || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
540 return __fread_chk (__ptr, __builtin_object_size (__ptr, 0), __size, __n,
541 __stream);
542 if (__size * __n > __builtin_object_size (__ptr, 0))
543 return __fread_chk_warn (__ptr, __builtin_object_size (__ptr, 0), __size, __n,
544 __stream);
545 }
546 return __fread_alias (__ptr, __size, __n, __stream);
547}
548extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,
549 int __n, FILE *__restrict __stream)
550 __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 3)));
551extern char *__fgets_unlocked_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets_unlocked")
552 __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2)));
553extern char *__fgets_unlocked_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_unlocked_chk")
554 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets_unlocked called with bigger size than length " "of destination buffer")));
555extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))) char *
556fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)
557{
558 if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
559 {
560 if (!__builtin_constant_p (__n) || __n <= 0)
561 return __fgets_unlocked_chk (__s, __builtin_object_size (__s, 2 > 1), __n,
562 __stream);
563 if ((size_t) __n > __builtin_object_size (__s, 2 > 1))
564 return __fgets_unlocked_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n,
565 __stream);
566 }
567 return __fgets_unlocked_alias (__s, __n, __stream);
568}
569extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen,
570 size_t __size, size_t __n,
571 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
572extern size_t __fread_unlocked_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread_unlocked") __attribute__ ((__warn_unused_result__));
573extern size_t __fread_unlocked_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_unlocked_chk")
574 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread_unlocked called with bigger size * nmemb than " "length of destination buffer")));
575extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
576fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,
577 FILE *__restrict __stream)
578{
579 if (__builtin_object_size (__ptr, 0) != (size_t) -1)
580 {
581 if (!__builtin_constant_p (__size)
582 || !__builtin_constant_p (__n)
583 || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
584 return __fread_unlocked_chk (__ptr, __builtin_object_size (__ptr, 0), __size,
585 __n, __stream);
586 if (__size * __n > __builtin_object_size (__ptr, 0))
587 return __fread_unlocked_chk_warn (__ptr, __builtin_object_size (__ptr, 0),
588 __size, __n, __stream);
589 }
590 if (__builtin_constant_p (__size)
591 && __builtin_constant_p (__n)
592 && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2))
593 && __size * __n <= 8)
594 {
595 size_t __cnt = __size * __n;
596 char *__cptr = (char *) __ptr;
597 if (__cnt == 0)
598 return 0;
599 for (; __cnt > 0; --__cnt)
600 {
601 int __c = getc_unlocked (__stream);
602 if (__c == (-1))
603 break;
604 *__cptr++ = __c;
605 }
606 return (__cptr - (char *) __ptr) / __size;
607 }
608 return __fread_unlocked_alias (__ptr, __size, __n, __stream);
609}
610
611
612typedef __u_char u_char;
613typedef __u_short u_short;
614typedef __u_int u_int;
615typedef __u_long u_long;
616typedef __quad_t quad_t;
617typedef __u_quad_t u_quad_t;
618typedef __fsid_t fsid_t;
619typedef __loff_t loff_t;
620typedef __ino_t ino_t;
621typedef __ino64_t ino64_t;
622typedef __dev_t dev_t;
623typedef __gid_t gid_t;
624typedef __mode_t mode_t;
625typedef __nlink_t nlink_t;
626typedef __uid_t uid_t;
627typedef __pid_t pid_t;
628typedef __id_t id_t;
629typedef __daddr_t daddr_t;
630typedef __caddr_t caddr_t;
631typedef __key_t key_t;
632typedef __clock_t clock_t;
633typedef __clockid_t clockid_t;
634typedef __time_t time_t;
635typedef __timer_t timer_t;
636typedef __useconds_t useconds_t;
637typedef __suseconds_t suseconds_t;
638typedef unsigned long int ulong;
639typedef unsigned short int ushort;
640typedef unsigned int uint;
641typedef __int8_t int8_t;
642typedef __int16_t int16_t;
643typedef __int32_t int32_t;
644typedef __int64_t int64_t;
645typedef __uint8_t u_int8_t;
646typedef __uint16_t u_int16_t;
647typedef __uint32_t u_int32_t;
648typedef __uint64_t u_int64_t;
649typedef int register_t __attribute__ ((__mode__ (__word__)));
650static __inline __uint16_t
651__bswap_16 (__uint16_t __bsx)
652{
653 return __builtin_bswap16 (__bsx);
654}
655static __inline __uint32_t
656__bswap_32 (__uint32_t __bsx)
657{
658 return __builtin_bswap32 (__bsx);
659}
660__extension__ static __inline __uint64_t
661__bswap_64 (__uint64_t __bsx)
662{
663 return __builtin_bswap64 (__bsx);
664}
665static __inline __uint16_t
666__uint16_identity (__uint16_t __x)
667{
668 return __x;
669}
670static __inline __uint32_t
671__uint32_identity (__uint32_t __x)
672{
673 return __x;
674}
675static __inline __uint64_t
676__uint64_identity (__uint64_t __x)
677{
678 return __x;
679}
680typedef struct
681{
682 unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
683} __sigset_t;
684typedef __sigset_t sigset_t;
685struct timeval
686{
687 __time_t tv_sec;
688 __suseconds_t tv_usec;
689};
690struct timespec
691{
692 __time_t tv_sec;
693 __syscall_slong_t tv_nsec;
694};
695typedef long int __fd_mask;
696typedef struct
697 {
698 __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
699 } fd_set;
700typedef __fd_mask fd_mask;
701
702extern int select (int __nfds, fd_set *__restrict __readfds,
703 fd_set *__restrict __writefds,
704 fd_set *__restrict __exceptfds,
705 struct timeval *__restrict __timeout);
706extern int pselect (int __nfds, fd_set *__restrict __readfds,
707 fd_set *__restrict __writefds,
708 fd_set *__restrict __exceptfds,
709 const struct timespec *__restrict __timeout,
710 const __sigset_t *__restrict __sigmask);
711extern long int __fdelt_chk (long int __d);
712extern long int __fdelt_warn (long int __d)
713 __attribute__((__warning__ ("bit outside of fd_set selected")));
714
715typedef __blksize_t blksize_t;
716typedef __blkcnt_t blkcnt_t;
717typedef __fsblkcnt_t fsblkcnt_t;
718typedef __fsfilcnt_t fsfilcnt_t;
719typedef __blkcnt64_t blkcnt64_t;
720typedef __fsblkcnt64_t fsblkcnt64_t;
721typedef __fsfilcnt64_t fsfilcnt64_t;
722typedef struct __pthread_internal_list
723{
724 struct __pthread_internal_list *__prev;
725 struct __pthread_internal_list *__next;
727typedef struct __pthread_internal_slist
728{
729 struct __pthread_internal_slist *__next;
732{
733 int __lock;
734 unsigned int __count;
735 int __owner;
736 unsigned int __nusers;
737 int __kind;
738 short __spins;
739 short __elision;
740 __pthread_list_t __list;
741};
743{
744 unsigned int __readers;
745 unsigned int __writers;
746 unsigned int __wrphase_futex;
747 unsigned int __writers_futex;
748 unsigned int __pad3;
749 unsigned int __pad4;
750 int __cur_writer;
751 int __shared;
752 signed char __rwelision;
753 unsigned char __pad1[7];
754 unsigned long int __pad2;
755 unsigned int __flags;
756};
757struct __pthread_cond_s
758{
759 __extension__ union
760 {
761 __extension__ unsigned long long int __wseq;
762 struct
763 {
764 unsigned int __low;
765 unsigned int __high;
766 } __wseq32;
767 };
768 __extension__ union
769 {
770 __extension__ unsigned long long int __g1_start;
771 struct
772 {
773 unsigned int __low;
774 unsigned int __high;
775 } __g1_start32;
776 };
777 unsigned int __g_refs[2] ;
778 unsigned int __g_size[2];
779 unsigned int __g1_orig_size;
780 unsigned int __wrefs;
781 unsigned int __g_signals[2];
782};
783typedef unsigned int __tss_t;
784typedef unsigned long int __thrd_t;
785typedef struct
786{
787 int __data ;
789typedef unsigned long int pthread_t;
790typedef union
791{
792 char __size[4];
793 int __align;
795typedef union
796{
797 char __size[4];
798 int __align;
800typedef unsigned int pthread_key_t;
801typedef int pthread_once_t;
802union pthread_attr_t
803{
804 char __size[56];
805 long int __align;
806};
807typedef union pthread_attr_t pthread_attr_t;
808typedef union
809{
810 struct __pthread_mutex_s __data;
811 char __size[40];
812 long int __align;
814typedef union
815{
816 struct __pthread_cond_s __data;
817 char __size[48];
818 __extension__ long long int __align;
820typedef union
821{
822 struct __pthread_rwlock_arch_t __data;
823 char __size[56];
824 long int __align;
826typedef union
827{
828 char __size[8];
829 long int __align;
831typedef volatile int pthread_spinlock_t;
832typedef union
833{
834 char __size[32];
835 long int __align;
837typedef union
838{
839 char __size[4];
840 int __align;
842
843
844struct stat
845 {
846 __dev_t st_dev;
847 __ino_t st_ino;
848 __nlink_t st_nlink;
849 __mode_t st_mode;
850 __uid_t st_uid;
851 __gid_t st_gid;
852 int __pad0;
853 __dev_t st_rdev;
854 __off_t st_size;
855 __blksize_t st_blksize;
856 __blkcnt_t st_blocks;
857 struct timespec st_atim;
858 struct timespec st_mtim;
859 struct timespec st_ctim;
860 __syscall_slong_t __glibc_reserved[3];
861 };
862struct stat64
863 {
864 __dev_t st_dev;
865 __ino64_t st_ino;
866 __nlink_t st_nlink;
867 __mode_t st_mode;
868 __uid_t st_uid;
869 __gid_t st_gid;
870 int __pad0;
871 __dev_t st_rdev;
872 __off_t st_size;
873 __blksize_t st_blksize;
874 __blkcnt64_t st_blocks;
875 struct timespec st_atim;
876 struct timespec st_mtim;
877 struct timespec st_ctim;
878 __syscall_slong_t __glibc_reserved[3];
879 };
880extern int stat (const char *__restrict __file,
881 struct stat *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
882extern int fstat (int __fd, struct stat *__buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
883extern int stat64 (const char *__restrict __file,
884 struct stat64 *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
885extern int fstat64 (int __fd, struct stat64 *__buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
886extern int fstatat (int __fd, const char *__restrict __file,
887 struct stat *__restrict __buf, int __flag)
888 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
889extern int fstatat64 (int __fd, const char *__restrict __file,
890 struct stat64 *__restrict __buf, int __flag)
891 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
892extern int lstat (const char *__restrict __file,
893 struct stat *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
894extern int lstat64 (const char *__restrict __file,
895 struct stat64 *__restrict __buf)
896 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
897extern int chmod (const char *__file, __mode_t __mode)
898 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
899extern int lchmod (const char *__file, __mode_t __mode)
900 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
901extern int fchmod (int __fd, __mode_t __mode) __attribute__ ((__nothrow__ , __leaf__));
902extern int fchmodat (int __fd, const char *__file, __mode_t __mode,
903 int __flag)
904 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__));
905extern __mode_t umask (__mode_t __mask) __attribute__ ((__nothrow__ , __leaf__));
906extern __mode_t getumask (void) __attribute__ ((__nothrow__ , __leaf__));
907extern int mkdir (const char *__path, __mode_t __mode)
908 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
909extern int mkdirat (int __fd, const char *__path, __mode_t __mode)
910 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
911extern int mknod (const char *__path, __mode_t __mode, __dev_t __dev)
912 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
913extern int mknodat (int __fd, const char *__path, __mode_t __mode,
914 __dev_t __dev) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
915extern int mkfifo (const char *__path, __mode_t __mode)
916 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
917extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
918 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
919extern int utimensat (int __fd, const char *__path,
920 const struct timespec __times[2],
921 int __flags)
922 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
923extern int futimens (int __fd, const struct timespec __times[2]) __attribute__ ((__nothrow__ , __leaf__));
924typedef __signed__ char __s8;
925typedef unsigned char __u8;
926typedef __signed__ short __s16;
927typedef unsigned short __u16;
928typedef __signed__ int __s32;
929typedef unsigned int __u32;
930__extension__ typedef __signed__ long long __s64;
931__extension__ typedef unsigned long long __u64;
932typedef struct {
933 unsigned long fds_bits[1024 / (8 * sizeof(long))];
935typedef void (*__kernel_sighandler_t)(int);
936typedef int __kernel_key_t;
937typedef int __kernel_mqd_t;
938typedef unsigned short __kernel_old_uid_t;
939typedef unsigned short __kernel_old_gid_t;
940typedef unsigned long __kernel_old_dev_t;
941typedef long __kernel_long_t;
942typedef unsigned long __kernel_ulong_t;
943typedef __kernel_ulong_t __kernel_ino_t;
944typedef unsigned int __kernel_mode_t;
945typedef int __kernel_pid_t;
946typedef int __kernel_ipc_pid_t;
947typedef unsigned int __kernel_uid_t;
948typedef unsigned int __kernel_gid_t;
949typedef __kernel_long_t __kernel_suseconds_t;
950typedef int __kernel_daddr_t;
951typedef unsigned int __kernel_uid32_t;
952typedef unsigned int __kernel_gid32_t;
953typedef __kernel_ulong_t __kernel_size_t;
954typedef __kernel_long_t __kernel_ssize_t;
955typedef __kernel_long_t __kernel_ptrdiff_t;
956typedef struct {
957 int val[2];
959typedef __kernel_long_t __kernel_off_t;
960typedef long long __kernel_loff_t;
961typedef __kernel_long_t __kernel_old_time_t;
962typedef __kernel_long_t __kernel_time_t;
963typedef long long __kernel_time64_t;
964typedef __kernel_long_t __kernel_clock_t;
965typedef int __kernel_timer_t;
966typedef int __kernel_clockid_t;
967typedef char * __kernel_caddr_t;
968typedef unsigned short __kernel_uid16_t;
969typedef unsigned short __kernel_gid16_t;
970typedef __u16 __le16;
971typedef __u16 __be16;
972typedef __u32 __le32;
973typedef __u32 __be32;
974typedef __u64 __le64;
975typedef __u64 __be64;
976typedef __u16 __sum16;
977typedef __u32 __wsum;
978typedef unsigned __poll_t;
979struct statx_timestamp {
980 __s64 tv_sec;
981 __u32 tv_nsec;
982 __s32 __reserved;
983};
984struct statx {
985 __u32 stx_mask;
986 __u32 stx_blksize;
987 __u64 stx_attributes;
988 __u32 stx_nlink;
989 __u32 stx_uid;
990 __u32 stx_gid;
991 __u16 stx_mode;
992 __u16 __spare0[1];
993 __u64 stx_ino;
994 __u64 stx_size;
995 __u64 stx_blocks;
996 __u64 stx_attributes_mask;
997 struct statx_timestamp stx_atime;
998 struct statx_timestamp stx_btime;
999 struct statx_timestamp stx_ctime;
1000 struct statx_timestamp stx_mtime;
1001 __u32 stx_rdev_major;
1002 __u32 stx_rdev_minor;
1003 __u32 stx_dev_major;
1004 __u32 stx_dev_minor;
1005 __u64 stx_mnt_id;
1006 __u64 __spare2;
1007 __u64 __spare3[12];
1008};
1009
1010int statx (int __dirfd, const char *__restrict __path, int __flags,
1011 unsigned int __mask, struct statx *__restrict __buf)
1012 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 5)));
1013
1014
1015typedef int wchar_t;
1016
1017typedef struct
1018 {
1019 int quot;
1020 int rem;
1021 } div_t;
1022typedef struct
1023 {
1024 long int quot;
1025 long int rem;
1026 } ldiv_t;
1027__extension__ typedef struct
1028 {
1029 long long int quot;
1030 long long int rem;
1031 } lldiv_t;
1032extern size_t __ctype_get_mb_cur_max (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1033extern double atof (const char *__nptr)
1034 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1035extern int atoi (const char *__nptr)
1036 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1037extern long int atol (const char *__nptr)
1038 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1039__extension__ extern long long int atoll (const char *__nptr)
1040 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1041extern double strtod (const char *__restrict __nptr,
1042 char **__restrict __endptr)
1043 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1044extern float strtof (const char *__restrict __nptr,
1045 char **__restrict __endptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1046extern long double strtold (const char *__restrict __nptr,
1047 char **__restrict __endptr)
1048 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1049extern _Float32 strtof32 (const char *__restrict __nptr,
1050 char **__restrict __endptr)
1051 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1052extern _Float64 strtof64 (const char *__restrict __nptr,
1053 char **__restrict __endptr)
1054 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1055extern _Float128 strtof128 (const char *__restrict __nptr,
1056 char **__restrict __endptr)
1057 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1058extern _Float32x strtof32x (const char *__restrict __nptr,
1059 char **__restrict __endptr)
1060 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1061extern _Float64x strtof64x (const char *__restrict __nptr,
1062 char **__restrict __endptr)
1063 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1064extern long int strtol (const char *__restrict __nptr,
1065 char **__restrict __endptr, int __base)
1066 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1067extern unsigned long int strtoul (const char *__restrict __nptr,
1068 char **__restrict __endptr, int __base)
1069 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1070__extension__
1071extern long long int strtoq (const char *__restrict __nptr,
1072 char **__restrict __endptr, int __base)
1073 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1074__extension__
1075extern unsigned long long int strtouq (const char *__restrict __nptr,
1076 char **__restrict __endptr, int __base)
1077 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1078__extension__
1079extern long long int strtoll (const char *__restrict __nptr,
1080 char **__restrict __endptr, int __base)
1081 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1082__extension__
1083extern unsigned long long int strtoull (const char *__restrict __nptr,
1084 char **__restrict __endptr, int __base)
1085 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1086extern int strfromd (char *__dest, size_t __size, const char *__format,
1087 double __f)
1088 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
1089extern int strfromf (char *__dest, size_t __size, const char *__format,
1090 float __f)
1091 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
1092extern int strfroml (char *__dest, size_t __size, const char *__format,
1093 long double __f)
1094 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
1095extern int strfromf32 (char *__dest, size_t __size, const char * __format,
1096 _Float32 __f)
1097 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
1098extern int strfromf64 (char *__dest, size_t __size, const char * __format,
1099 _Float64 __f)
1100 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
1101extern int strfromf128 (char *__dest, size_t __size, const char * __format,
1102 _Float128 __f)
1103 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
1104extern int strfromf32x (char *__dest, size_t __size, const char * __format,
1105 _Float32x __f)
1106 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
1107extern int strfromf64x (char *__dest, size_t __size, const char * __format,
1108 _Float64x __f)
1109 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
1110struct __locale_struct
1111{
1112 struct __locale_data *__locales[13];
1113 const unsigned short int *__ctype_b;
1114 const int *__ctype_tolower;
1115 const int *__ctype_toupper;
1116 const char *__names[13];
1117};
1118typedef struct __locale_struct *__locale_t;
1119typedef __locale_t locale_t;
1120extern long int strtol_l (const char *__restrict __nptr,
1121 char **__restrict __endptr, int __base,
1122 locale_t __loc) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));
1123extern unsigned long int strtoul_l (const char *__restrict __nptr,
1124 char **__restrict __endptr,
1125 int __base, locale_t __loc)
1126 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));
1127__extension__
1128extern long long int strtoll_l (const char *__restrict __nptr,
1129 char **__restrict __endptr, int __base,
1130 locale_t __loc)
1131 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));
1132__extension__
1133extern unsigned long long int strtoull_l (const char *__restrict __nptr,
1134 char **__restrict __endptr,
1135 int __base, locale_t __loc)
1136 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));
1137extern double strtod_l (const char *__restrict __nptr,
1138 char **__restrict __endptr, locale_t __loc)
1139 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
1140extern float strtof_l (const char *__restrict __nptr,
1141 char **__restrict __endptr, locale_t __loc)
1142 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
1143extern long double strtold_l (const char *__restrict __nptr,
1144 char **__restrict __endptr,
1145 locale_t __loc)
1146 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
1147extern _Float32 strtof32_l (const char *__restrict __nptr,
1148 char **__restrict __endptr,
1149 locale_t __loc)
1150 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
1151extern _Float64 strtof64_l (const char *__restrict __nptr,
1152 char **__restrict __endptr,
1153 locale_t __loc)
1154 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
1155extern _Float128 strtof128_l (const char *__restrict __nptr,
1156 char **__restrict __endptr,
1157 locale_t __loc)
1158 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
1159extern _Float32x strtof32x_l (const char *__restrict __nptr,
1160 char **__restrict __endptr,
1161 locale_t __loc)
1162 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
1163extern _Float64x strtof64x_l (const char *__restrict __nptr,
1164 char **__restrict __endptr,
1165 locale_t __loc)
1166 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
1167extern __inline __attribute__ ((__gnu_inline__)) int
1168__attribute__ ((__nothrow__ , __leaf__)) atoi (const char *__nptr)
1169{
1170 return (int) strtol (__nptr, (char **) ((void *)0), 10);
1171}
1172extern __inline __attribute__ ((__gnu_inline__)) long int
1173__attribute__ ((__nothrow__ , __leaf__)) atol (const char *__nptr)
1174{
1175 return strtol (__nptr, (char **) ((void *)0), 10);
1176}
1177__extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int
1178__attribute__ ((__nothrow__ , __leaf__)) atoll (const char *__nptr)
1179{
1180 return strtoll (__nptr, (char **) ((void *)0), 10);
1181}
1182extern char *l64a (long int __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1183extern long int a64l (const char *__s)
1184 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1185extern long int random (void) __attribute__ ((__nothrow__ , __leaf__));
1186extern void srandom (unsigned int __seed) __attribute__ ((__nothrow__ , __leaf__));
1187extern char *initstate (unsigned int __seed, char *__statebuf,
1188 size_t __statelen) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
1189extern char *setstate (char *__statebuf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1190struct random_data
1191 {
1192 int32_t *fptr;
1193 int32_t *rptr;
1194 int32_t *state;
1195 int rand_type;
1196 int rand_deg;
1197 int rand_sep;
1198 int32_t *end_ptr;
1199 };
1200extern int random_r (struct random_data *__restrict __buf,
1201 int32_t *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1202extern int srandom_r (unsigned int __seed, struct random_data *__buf)
1203 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
1204extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
1205 size_t __statelen,
1206 struct random_data *__restrict __buf)
1207 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4)));
1208extern int setstate_r (char *__restrict __statebuf,
1209 struct random_data *__restrict __buf)
1210 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1211extern int rand (void) __attribute__ ((__nothrow__ , __leaf__));
1212extern void srand (unsigned int __seed) __attribute__ ((__nothrow__ , __leaf__));
1213extern int rand_r (unsigned int *__seed) __attribute__ ((__nothrow__ , __leaf__));
1214extern double drand48 (void) __attribute__ ((__nothrow__ , __leaf__));
1215extern double erand48 (unsigned short int __xsubi[3]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1216extern long int lrand48 (void) __attribute__ ((__nothrow__ , __leaf__));
1217extern long int nrand48 (unsigned short int __xsubi[3])
1218 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1219extern long int mrand48 (void) __attribute__ ((__nothrow__ , __leaf__));
1220extern long int jrand48 (unsigned short int __xsubi[3])
1221 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1222extern void srand48 (long int __seedval) __attribute__ ((__nothrow__ , __leaf__));
1223extern unsigned short int *seed48 (unsigned short int __seed16v[3])
1224 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1225extern void lcong48 (unsigned short int __param[7]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1226struct drand48_data
1227 {
1228 unsigned short int __x[3];
1229 unsigned short int __old_x[3];
1230 unsigned short int __c;
1231 unsigned short int __init;
1232 __extension__ unsigned long long int __a;
1233 };
1234extern int drand48_r (struct drand48_data *__restrict __buffer,
1235 double *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1236extern int erand48_r (unsigned short int __xsubi[3],
1237 struct drand48_data *__restrict __buffer,
1238 double *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1239extern int lrand48_r (struct drand48_data *__restrict __buffer,
1240 long int *__restrict __result)
1241 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1242extern int nrand48_r (unsigned short int __xsubi[3],
1243 struct drand48_data *__restrict __buffer,
1244 long int *__restrict __result)
1245 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1246extern int mrand48_r (struct drand48_data *__restrict __buffer,
1247 long int *__restrict __result)
1248 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1249extern int jrand48_r (unsigned short int __xsubi[3],
1250 struct drand48_data *__restrict __buffer,
1251 long int *__restrict __result)
1252 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1253extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
1254 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
1255extern int seed48_r (unsigned short int __seed16v[3],
1256 struct drand48_data *__buffer) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1257extern int lcong48_r (unsigned short int __param[7],
1258 struct drand48_data *__buffer)
1259 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1260extern void *malloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__))
1261 __attribute__ ((__alloc_size__ (1))) __attribute__ ((__warn_unused_result__));
1262extern void *calloc (size_t __nmemb, size_t __size)
1263 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1, 2))) __attribute__ ((__warn_unused_result__));
1264extern void *realloc (void *__ptr, size_t __size)
1265 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2)));
1266extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
1267 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__))
1268 __attribute__ ((__alloc_size__ (2, 3)));
1269extern void free (void *__ptr) __attribute__ ((__nothrow__ , __leaf__));
1270
1271extern void *alloca (size_t __size) __attribute__ ((__nothrow__ , __leaf__));
1272
1273extern void *valloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__))
1274 __attribute__ ((__alloc_size__ (1))) __attribute__ ((__warn_unused_result__));
1275extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
1276 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1277extern void *aligned_alloc (size_t __alignment, size_t __size)
1278 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (2))) __attribute__ ((__warn_unused_result__));
1279extern void abort (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));
1280extern int atexit (void (*__func) (void)) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1281extern int at_quick_exit (void (*__func) (void)) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1282extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
1283 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1284extern void exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));
1285extern void quick_exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));
1286extern void _Exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));
1287extern char *getenv (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1288extern char *secure_getenv (const char *__name)
1289 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1290extern int putenv (char *__string) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1291extern int setenv (const char *__name, const char *__value, int __replace)
1292 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
1293extern int unsetenv (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1294extern int clearenv (void) __attribute__ ((__nothrow__ , __leaf__));
1295extern char *mktemp (char *__template) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1296extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1297extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1298extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1299extern int mkstemps64 (char *__template, int __suffixlen)
1300 __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1301extern char *mkdtemp (char *__template) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1302extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1303extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1304extern int mkostemps (char *__template, int __suffixlen, int __flags)
1305 __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1306extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
1307 __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1308extern int system (const char *__command) __attribute__ ((__warn_unused_result__));
1309extern char *canonicalize_file_name (const char *__name)
1310 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1311extern char *realpath (const char *__restrict __name,
1312 char *__restrict __resolved) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1313typedef int (*__compar_fn_t) (const void *, const void *);
1314typedef __compar_fn_t comparison_fn_t;
1315typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
1316extern void *bsearch (const void *__key, const void *__base,
1317 size_t __nmemb, size_t __size, __compar_fn_t __compar)
1318 __attribute__ ((__nonnull__ (1, 2, 5))) __attribute__ ((__warn_unused_result__));
1319extern __inline __attribute__ ((__gnu_inline__)) void *
1320bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size,
1321 __compar_fn_t __compar)
1322{
1323 size_t __l, __u, __idx;
1324 const void *__p;
1325 int __comparison;
1326 __l = 0;
1327 __u = __nmemb;
1328 while (__l < __u)
1329 {
1330 __idx = (__l + __u) / 2;
1331 __p = (void *) (((const char *) __base) + (__idx * __size));
1332 __comparison = (*__compar) (__key, __p);
1333 if (__comparison < 0)
1334 __u = __idx;
1335 else if (__comparison > 0)
1336 __l = __idx + 1;
1337 else
1338 return (void *) __p;
1339 }
1340 return ((void *)0);
1341}
1342extern void qsort (void *__base, size_t __nmemb, size_t __size,
1343 __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
1344extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
1345 __compar_d_fn_t __compar, void *__arg)
1346 __attribute__ ((__nonnull__ (1, 4)));
1347extern int abs (int __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
1348extern long int labs (long int __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
1349__extension__ extern long long int llabs (long long int __x)
1350 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
1351extern div_t div (int __numer, int __denom)
1352 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
1353extern ldiv_t ldiv (long int __numer, long int __denom)
1354 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
1355__extension__ extern lldiv_t lldiv (long long int __numer,
1356 long long int __denom)
1357 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
1358extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
1359 int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
1360extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
1361 int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
1362extern char *gcvt (double __value, int __ndigit, char *__buf)
1363 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));
1364extern char *qecvt (long double __value, int __ndigit,
1365 int *__restrict __decpt, int *__restrict __sign)
1366 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
1367extern char *qfcvt (long double __value, int __ndigit,
1368 int *__restrict __decpt, int *__restrict __sign)
1369 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
1370extern char *qgcvt (long double __value, int __ndigit, char *__buf)
1371 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));
1372extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
1373 int *__restrict __sign, char *__restrict __buf,
1374 size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));
1375extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
1376 int *__restrict __sign, char *__restrict __buf,
1377 size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));
1378extern int qecvt_r (long double __value, int __ndigit,
1379 int *__restrict __decpt, int *__restrict __sign,
1380 char *__restrict __buf, size_t __len)
1381 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));
1382extern int qfcvt_r (long double __value, int __ndigit,
1383 int *__restrict __decpt, int *__restrict __sign,
1384 char *__restrict __buf, size_t __len)
1385 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));
1386extern int mblen (const char *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__));
1387extern int mbtowc (wchar_t *__restrict __pwc,
1388 const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__ , __leaf__));
1389extern int wctomb (char *__s, wchar_t __wchar) __attribute__ ((__nothrow__ , __leaf__));
1390extern size_t mbstowcs (wchar_t *__restrict __pwcs,
1391 const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__ , __leaf__))
1392 __attribute__ ((__access__ (__read_only__, 2)));
1393extern size_t wcstombs (char *__restrict __s,
1394 const wchar_t *__restrict __pwcs, size_t __n)
1395 __attribute__ ((__nothrow__ , __leaf__))
1396 __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2)));
1397extern int rpmatch (const char *__response) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1398extern int getsubopt (char **__restrict __optionp,
1399 char *const *__restrict __tokens,
1400 char **__restrict __valuep)
1401 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3))) __attribute__ ((__warn_unused_result__));
1402extern int posix_openpt (int __oflag) __attribute__ ((__warn_unused_result__));
1403extern int grantpt (int __fd) __attribute__ ((__nothrow__ , __leaf__));
1404extern int unlockpt (int __fd) __attribute__ ((__nothrow__ , __leaf__));
1405extern char *ptsname (int __fd) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1406extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
1407 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 2, 3)));
1408extern int getpt (void);
1409extern int getloadavg (double __loadavg[], int __nelem)
1410 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1411extern __inline __attribute__ ((__gnu_inline__)) double
1412__attribute__ ((__nothrow__ , __leaf__)) atof (const char *__nptr)
1413{
1414 return strtod (__nptr, (char **) ((void *)0));
1415}
1416extern char *__realpath_chk (const char *__restrict __name,
1417 char *__restrict __resolved,
1418 size_t __resolvedlen) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1419extern char *__realpath_alias (const char *__restrict __name, char *__restrict __resolved) __asm__ ("" "realpath") __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1420extern char *__realpath_chk_warn (const char *__restrict __name, char *__restrict __resolved, size_t __resolvedlen) __asm__ ("" "__realpath_chk") __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__))
1421 __attribute__((__warning__ ("second argument of realpath must be either NULL or at " "least PATH_MAX bytes long buffer")));
1422extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
1423__attribute__ ((__nothrow__ , __leaf__)) realpath (const char *__restrict __name, char *__restrict __resolved)
1424{
1425 if (__builtin_object_size (__resolved, 2 > 1) != (size_t) -1)
1426 {
1427 return __realpath_chk (__name, __resolved, __builtin_object_size (__resolved, 2 > 1));
1428 }
1429 return __realpath_alias (__name, __resolved);
1430}
1431extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
1432 size_t __nreal) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)))
1433 __attribute__ ((__access__ (__write_only__, 2, 3)));
1434extern int __ptsname_r_alias (int __fd, char *__buf, size_t __buflen) __asm__ ("" "ptsname_r") __attribute__ ((__nothrow__ , __leaf__))
1435 __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 2, 3)));
1436extern int __ptsname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) __asm__ ("" "__ptsname_r_chk") __attribute__ ((__nothrow__ , __leaf__))
1437 __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ptsname_r called with buflen bigger than " "size of buf")));
1438extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
1439__attribute__ ((__nothrow__ , __leaf__)) ptsname_r (int __fd, char *__buf, size_t __buflen)
1440{
1441 if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
1442 {
1443 if (!__builtin_constant_p (__buflen))
1444 return __ptsname_r_chk (__fd, __buf, __buflen,
1445 __builtin_object_size (__buf, 2 > 1));
1446 if (__buflen > __builtin_object_size (__buf, 2 > 1))
1447 return __ptsname_r_chk_warn (__fd, __buf, __buflen,
1448 __builtin_object_size (__buf, 2 > 1));
1449 }
1450 return __ptsname_r_alias (__fd, __buf, __buflen);
1451}
1452extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
1453 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1454extern int __wctomb_alias (char *__s, wchar_t __wchar) __asm__ ("" "wctomb") __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1455extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) int
1456__attribute__ ((__nothrow__ , __leaf__)) wctomb (char *__s, wchar_t __wchar)
1457{
1458 if (__builtin_object_size (__s, 2 > 1) != (size_t) -1
1459 && 16 > __builtin_object_size (__s, 2 > 1))
1460 return __wctomb_chk (__s, __wchar, __builtin_object_size (__s, 2 > 1));
1461 return __wctomb_alias (__s, __wchar);
1462}
1463extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
1464 const char *__restrict __src,
1465 size_t __len, size_t __dstlen) __attribute__ ((__nothrow__ , __leaf__))
1466 __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2)));
1467extern size_t __mbstowcs_alias (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) __asm__ ("" "mbstowcs") __attribute__ ((__nothrow__ , __leaf__))
1468 __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2)));
1469extern size_t __mbstowcs_chk_warn (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len, size_t __dstlen) __asm__ ("" "__mbstowcs_chk") __attribute__ ((__nothrow__ , __leaf__))
1470 __attribute__((__warning__ ("mbstowcs called with dst buffer smaller than len " "* sizeof (wchar_t)")));
1471extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
1472__attribute__ ((__nothrow__ , __leaf__)) mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len)
1473{
1474 if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
1475 {
1476 if (!__builtin_constant_p (__len))
1477 return __mbstowcs_chk (__dst, __src, __len,
1478 __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
1479 if (__len > __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t))
1480 return __mbstowcs_chk_warn (__dst, __src, __len,
1481 (__builtin_object_size (__dst, 2 > 1)
1482 / sizeof (wchar_t)));
1483 }
1484 return __mbstowcs_alias (__dst, __src, __len);
1485}
1486extern size_t __wcstombs_chk (char *__restrict __dst,
1487 const wchar_t *__restrict __src,
1488 size_t __len, size_t __dstlen) __attribute__ ((__nothrow__ , __leaf__))
1489 __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2)));
1490extern size_t __wcstombs_alias (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) __asm__ ("" "wcstombs") __attribute__ ((__nothrow__ , __leaf__))
1491 __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2)));
1492extern size_t __wcstombs_chk_warn (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len, size_t __dstlen) __asm__ ("" "__wcstombs_chk") __attribute__ ((__nothrow__ , __leaf__))
1493 __attribute__((__warning__ ("wcstombs called with dst buffer smaller than len")));
1494extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
1495__attribute__ ((__nothrow__ , __leaf__)) wcstombs (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len)
1496{
1497 if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
1498 {
1499 if (!__builtin_constant_p (__len))
1500 return __wcstombs_chk (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1));
1501 if (__len > __builtin_object_size (__dst, 2 > 1))
1502 return __wcstombs_chk_warn (__dst, __src, __len,
1503 __builtin_object_size (__dst, 2 > 1));
1504 }
1505 return __wcstombs_alias (__dst, __src, __len);
1506}
1507
1508typedef long int ptrdiff_t;
1509
1510extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
1511 size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1512extern void *memmove (void *__dest, const void *__src, size_t __n)
1513 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1514extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
1515 int __c, size_t __n)
1516 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__write_only__, 1, 4)));
1517extern void *memset (void *__s, int __c, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1518extern int memcmp (const void *__s1, const void *__s2, size_t __n)
1519 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1520extern void *memchr (const void *__s, int __c, size_t __n)
1521 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1522extern void *rawmemchr (const void *__s, int __c)
1523 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1524extern void *memrchr (const void *__s, int __c, size_t __n)
1525 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)))
1526 __attribute__ ((__access__ (__read_only__, 1, 3)));
1527extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
1528 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1529extern char *strncpy (char *__restrict __dest,
1530 const char *__restrict __src, size_t __n)
1531 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1532extern char *strcat (char *__restrict __dest, const char *__restrict __src)
1533 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1534extern char *strncat (char *__restrict __dest, const char *__restrict __src,
1535 size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1536extern int strcmp (const char *__s1, const char *__s2)
1537 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1538extern int strncmp (const char *__s1, const char *__s2, size_t __n)
1539 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1540extern int strcoll (const char *__s1, const char *__s2)
1541 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1542extern size_t strxfrm (char *__restrict __dest,
1543 const char *__restrict __src, size_t __n)
1544 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 1, 3)));
1545extern int strcoll_l (const char *__s1, const char *__s2, locale_t __l)
1546 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
1547extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
1548 locale_t __l) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4)))
1549 __attribute__ ((__access__ (__write_only__, 1, 3)));
1550extern char *strdup (const char *__s)
1551 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
1552extern char *strndup (const char *__string, size_t __n)
1553 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
1554extern char *strchr (const char *__s, int __c)
1555 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1556extern char *strrchr (const char *__s, int __c)
1557 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1558extern char *strchrnul (const char *__s, int __c)
1559 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1560extern size_t strcspn (const char *__s, const char *__reject)
1561 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1562extern size_t strspn (const char *__s, const char *__accept)
1563 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1564extern char *strpbrk (const char *__s, const char *__accept)
1565 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1566extern char *strstr (const char *__haystack, const char *__needle)
1567 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1568extern char *strtok (char *__restrict __s, const char *__restrict __delim)
1569 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
1570extern char *__strtok_r (char *__restrict __s,
1571 const char *__restrict __delim,
1572 char **__restrict __save_ptr)
1573 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
1574extern char *strtok_r (char *__restrict __s, const char *__restrict __delim,
1575 char **__restrict __save_ptr)
1576 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
1577extern char *strcasestr (const char *__haystack, const char *__needle)
1578 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1579extern void *memmem (const void *__haystack, size_t __haystacklen,
1580 const void *__needle, size_t __needlelen)
1581 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)))
1582 __attribute__ ((__access__ (__read_only__, 1, 2)))
1583 __attribute__ ((__access__ (__read_only__, 3, 4)));
1584extern void *__mempcpy (void *__restrict __dest,
1585 const void *__restrict __src, size_t __n)
1586 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1587extern void *mempcpy (void *__restrict __dest,
1588 const void *__restrict __src, size_t __n)
1589 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1590extern size_t strlen (const char *__s)
1591 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1592extern size_t strnlen (const char *__string, size_t __maxlen)
1593 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1594extern char *strerror (int __errnum) __attribute__ ((__nothrow__ , __leaf__));
1595extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
1596 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3)));
1597extern const char *strerrordesc_np (int __err) __attribute__ ((__nothrow__ , __leaf__));
1598extern const char *strerrorname_np (int __err) __attribute__ ((__nothrow__ , __leaf__));
1599extern char *strerror_l (int __errnum, locale_t __l) __attribute__ ((__nothrow__ , __leaf__));
1600
1601extern int bcmp (const void *__s1, const void *__s2, size_t __n)
1602 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1603extern void bcopy (const void *__src, void *__dest, size_t __n)
1604 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1605extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1606extern char *index (const char *__s, int __c)
1607 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1608extern char *rindex (const char *__s, int __c)
1609 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
1610extern int ffs (int __i) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
1611extern int ffsl (long int __l) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
1612__extension__ extern int ffsll (long long int __ll)
1613 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
1614extern int strcasecmp (const char *__s1, const char *__s2)
1615 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1616extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
1617 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1618extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc)
1619 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
1620extern int strncasecmp_l (const char *__s1, const char *__s2,
1621 size_t __n, locale_t __loc)
1622 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));
1623
1624extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
1625__attribute__ ((__nothrow__ , __leaf__)) bcopy (const void *__src, void *__dest, size_t __len)
1626{
1627 (void) __builtin___memmove_chk (__dest, __src, __len,
1628 __builtin_object_size (__dest, 0));
1629}
1630extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
1631__attribute__ ((__nothrow__ , __leaf__)) bzero (void *__dest, size_t __len)
1632{
1633 (void) __builtin___memset_chk (__dest, '\0', __len,
1634 __builtin_object_size (__dest, 0));
1635}
1636extern void explicit_bzero (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)))
1637 __attribute__ ((__access__ (__write_only__, 1, 2)));
1638extern char *strsep (char **__restrict __stringp,
1639 const char *__restrict __delim)
1640 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1641extern char *strsignal (int __sig) __attribute__ ((__nothrow__ , __leaf__));
1642extern const char *sigabbrev_np (int __sig) __attribute__ ((__nothrow__ , __leaf__));
1643extern const char *sigdescr_np (int __sig) __attribute__ ((__nothrow__ , __leaf__));
1644extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src)
1645 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1646extern char *stpcpy (char *__restrict __dest, const char *__restrict __src)
1647 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1648extern char *__stpncpy (char *__restrict __dest,
1649 const char *__restrict __src, size_t __n)
1650 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1651extern char *stpncpy (char *__restrict __dest,
1652 const char *__restrict __src, size_t __n)
1653 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1654extern int strverscmp (const char *__s1, const char *__s2)
1655 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
1656extern char *strfry (char *__string) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1657extern void *memfrob (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)))
1658 __attribute__ ((__access__ (__write_only__, 1, 2)));
1659extern char *basename (const char *__filename) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1660extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
1661__attribute__ ((__nothrow__ , __leaf__)) memcpy (void *__restrict __dest, const void *__restrict __src, size_t __len)
1662{
1663 return __builtin___memcpy_chk (__dest, __src, __len,
1664 __builtin_object_size (__dest, 0));
1665}
1666extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
1667__attribute__ ((__nothrow__ , __leaf__)) memmove (void *__dest, const void *__src, size_t __len)
1668{
1669 return __builtin___memmove_chk (__dest, __src, __len,
1670 __builtin_object_size (__dest, 0));
1671}
1672extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
1673__attribute__ ((__nothrow__ , __leaf__)) mempcpy (void *__restrict __dest, const void *__restrict __src, size_t __len)
1674{
1675 return __builtin___mempcpy_chk (__dest, __src, __len,
1676 __builtin_object_size (__dest, 0));
1677}
1678extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
1679__attribute__ ((__nothrow__ , __leaf__)) memset (void *__dest, int __ch, size_t __len)
1680{
1681 return __builtin___memset_chk (__dest, __ch, __len,
1682 __builtin_object_size (__dest, 0));
1683}
1684void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen)
1685 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__write_only__, 1, 2)));
1686extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
1687__attribute__ ((__nothrow__ , __leaf__)) explicit_bzero (void *__dest, size_t __len)
1688{
1689 __explicit_bzero_chk (__dest, __len, __builtin_object_size (__dest, 0));
1690}
1691extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
1692__attribute__ ((__nothrow__ , __leaf__)) strcpy (char *__restrict __dest, const char *__restrict __src)
1693{
1694 return __builtin___strcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
1695}
1696extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
1697__attribute__ ((__nothrow__ , __leaf__)) stpcpy (char *__restrict __dest, const char *__restrict __src)
1698{
1699 return __builtin___stpcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
1700}
1701extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
1702__attribute__ ((__nothrow__ , __leaf__)) strncpy (char *__restrict __dest, const char *__restrict __src, size_t __len)
1703{
1704 return __builtin___strncpy_chk (__dest, __src, __len,
1705 __builtin_object_size (__dest, 2 > 1));
1706}
1707extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
1708__attribute__ ((__nothrow__ , __leaf__)) stpncpy (char *__dest, const char *__src, size_t __n)
1709{
1710 return __builtin___stpncpy_chk (__dest, __src, __n,
1711 __builtin_object_size (__dest, 2 > 1));
1712}
1713extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
1714__attribute__ ((__nothrow__ , __leaf__)) strcat (char *__restrict __dest, const char *__restrict __src)
1715{
1716 return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
1717}
1718extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
1719__attribute__ ((__nothrow__ , __leaf__)) strncat (char *__restrict __dest, const char *__restrict __src, size_t __len)
1720{
1721 return __builtin___strncat_chk (__dest, __src, __len,
1722 __builtin_object_size (__dest, 2 > 1));
1723}
1724
1725typedef __uint8_t uint8_t;
1726typedef __uint16_t uint16_t;
1727typedef __uint32_t uint32_t;
1728typedef __uint64_t uint64_t;
1729typedef __int_least8_t int_least8_t;
1730typedef __int_least16_t int_least16_t;
1731typedef __int_least32_t int_least32_t;
1732typedef __int_least64_t int_least64_t;
1733typedef __uint_least8_t uint_least8_t;
1734typedef __uint_least16_t uint_least16_t;
1735typedef __uint_least32_t uint_least32_t;
1736typedef __uint_least64_t uint_least64_t;
1737typedef signed char int_fast8_t;
1738typedef long int int_fast16_t;
1739typedef long int int_fast32_t;
1740typedef long int int_fast64_t;
1741typedef unsigned char uint_fast8_t;
1742typedef unsigned long int uint_fast16_t;
1743typedef unsigned long int uint_fast32_t;
1744typedef unsigned long int uint_fast64_t;
1745typedef long int intptr_t;
1746typedef unsigned long int uintptr_t;
1747typedef __intmax_t intmax_t;
1748typedef __uintmax_t uintmax_t;
1749typedef int __gwchar_t;
1750
1751typedef struct
1752 {
1753 long int quot;
1754 long int rem;
1755 } imaxdiv_t;
1756extern intmax_t imaxabs (intmax_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
1757extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom)
1758 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
1759extern intmax_t strtoimax (const char *__restrict __nptr,
1760 char **__restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__));
1761extern uintmax_t strtoumax (const char *__restrict __nptr,
1762 char ** __restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__));
1763extern intmax_t wcstoimax (const __gwchar_t *__restrict __nptr,
1764 __gwchar_t **__restrict __endptr, int __base)
1765 __attribute__ ((__nothrow__ , __leaf__));
1766extern uintmax_t wcstoumax (const __gwchar_t *__restrict __nptr,
1767 __gwchar_t ** __restrict __endptr, int __base)
1768 __attribute__ ((__nothrow__ , __leaf__));
1769
1770
1771typedef __socklen_t socklen_t;
1772extern int access (const char *__name, int __type) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1773extern int euidaccess (const char *__name, int __type)
1774 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1775extern int eaccess (const char *__name, int __type)
1776 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1777extern int faccessat (int __fd, const char *__file, int __type, int __flag)
1778 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__));
1779extern __off_t lseek (int __fd, __off_t __offset, int __whence) __attribute__ ((__nothrow__ , __leaf__));
1780extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence)
1781 __attribute__ ((__nothrow__ , __leaf__));
1782extern int close (int __fd);
1783extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __attribute__ ((__warn_unused_result__))
1784 __attribute__ ((__access__ (__write_only__, 2, 3)));
1785extern ssize_t write (int __fd, const void *__buf, size_t __n) __attribute__ ((__warn_unused_result__))
1786 __attribute__ ((__access__ (__read_only__, 2, 3)));
1787extern ssize_t pread (int __fd, void *__buf, size_t __nbytes,
1788 __off_t __offset) __attribute__ ((__warn_unused_result__))
1789 __attribute__ ((__access__ (__write_only__, 2, 3)));
1790extern ssize_t pwrite (int __fd, const void *__buf, size_t __n,
1791 __off_t __offset) __attribute__ ((__warn_unused_result__))
1792 __attribute__ ((__access__ (__read_only__, 2, 3)));
1793extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
1794 __off64_t __offset) __attribute__ ((__warn_unused_result__))
1795 __attribute__ ((__access__ (__write_only__, 2, 3)));
1796extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n,
1797 __off64_t __offset) __attribute__ ((__warn_unused_result__))
1798 __attribute__ ((__access__ (__read_only__, 2, 3)));
1799extern int pipe (int __pipedes[2]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1800extern int pipe2 (int __pipedes[2], int __flags) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1801extern unsigned int alarm (unsigned int __seconds) __attribute__ ((__nothrow__ , __leaf__));
1802extern unsigned int sleep (unsigned int __seconds);
1803extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
1804 __attribute__ ((__nothrow__ , __leaf__));
1805extern int usleep (__useconds_t __useconds);
1806extern int pause (void);
1807extern int chown (const char *__file, __uid_t __owner, __gid_t __group)
1808 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1809extern int fchown (int __fd, __uid_t __owner, __gid_t __group) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1810extern int lchown (const char *__file, __uid_t __owner, __gid_t __group)
1811 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1812extern int fchownat (int __fd, const char *__file, __uid_t __owner,
1813 __gid_t __group, int __flag)
1814 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__));
1815extern int chdir (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1816extern int fchdir (int __fd) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1817extern char *getcwd (char *__buf, size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__))
1818 __attribute__ ((__access__ (__write_only__, 1, 2)));
1819extern char *get_current_dir_name (void) __attribute__ ((__nothrow__ , __leaf__));
1820extern char *getwd (char *__buf)
1821 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) __attribute__ ((__warn_unused_result__))
1822 __attribute__ ((__access__ (__write_only__, 1)));
1823extern int dup (int __fd) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1824extern int dup2 (int __fd, int __fd2) __attribute__ ((__nothrow__ , __leaf__));
1825extern int dup3 (int __fd, int __fd2, int __flags) __attribute__ ((__nothrow__ , __leaf__));
1826extern char **__environ;
1827extern char **environ;
1828extern int execve (const char *__path, char *const __argv[],
1829 char *const __envp[]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1830extern int fexecve (int __fd, char *const __argv[], char *const __envp[])
1831 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
1832extern int execv (const char *__path, char *const __argv[])
1833 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1834extern int execle (const char *__path, const char *__arg, ...)
1835 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1836extern int execl (const char *__path, const char *__arg, ...)
1837 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1838extern int execvp (const char *__file, char *const __argv[])
1839 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1840extern int execlp (const char *__file, const char *__arg, ...)
1841 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1842extern int execvpe (const char *__file, char *const __argv[],
1843 char *const __envp[])
1844 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1845extern int nice (int __inc) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1846extern void _exit (int __status) __attribute__ ((__noreturn__));
1847enum
1848 {
1849 _PC_LINK_MAX,
1850 _PC_MAX_CANON,
1851 _PC_MAX_INPUT,
1852 _PC_NAME_MAX,
1853 _PC_PATH_MAX,
1854 _PC_PIPE_BUF,
1855 _PC_CHOWN_RESTRICTED,
1856 _PC_NO_TRUNC,
1857 _PC_VDISABLE,
1858 _PC_SYNC_IO,
1859 _PC_ASYNC_IO,
1860 _PC_PRIO_IO,
1861 _PC_SOCK_MAXBUF,
1862 _PC_FILESIZEBITS,
1863 _PC_REC_INCR_XFER_SIZE,
1864 _PC_REC_MAX_XFER_SIZE,
1865 _PC_REC_MIN_XFER_SIZE,
1866 _PC_REC_XFER_ALIGN,
1867 _PC_ALLOC_SIZE_MIN,
1868 _PC_SYMLINK_MAX,
1869 _PC_2_SYMLINKS
1870 };
1871enum
1872 {
1873 _SC_ARG_MAX,
1874 _SC_CHILD_MAX,
1875 _SC_CLK_TCK,
1876 _SC_NGROUPS_MAX,
1877 _SC_OPEN_MAX,
1878 _SC_STREAM_MAX,
1879 _SC_TZNAME_MAX,
1880 _SC_JOB_CONTROL,
1881 _SC_SAVED_IDS,
1882 _SC_REALTIME_SIGNALS,
1883 _SC_PRIORITY_SCHEDULING,
1884 _SC_TIMERS,
1885 _SC_ASYNCHRONOUS_IO,
1886 _SC_PRIORITIZED_IO,
1887 _SC_SYNCHRONIZED_IO,
1888 _SC_FSYNC,
1889 _SC_MAPPED_FILES,
1890 _SC_MEMLOCK,
1891 _SC_MEMLOCK_RANGE,
1892 _SC_MEMORY_PROTECTION,
1893 _SC_MESSAGE_PASSING,
1894 _SC_SEMAPHORES,
1895 _SC_SHARED_MEMORY_OBJECTS,
1896 _SC_AIO_LISTIO_MAX,
1897 _SC_AIO_MAX,
1898 _SC_AIO_PRIO_DELTA_MAX,
1899 _SC_DELAYTIMER_MAX,
1900 _SC_MQ_OPEN_MAX,
1901 _SC_MQ_PRIO_MAX,
1902 _SC_VERSION,
1903 _SC_PAGESIZE,
1904 _SC_RTSIG_MAX,
1905 _SC_SEM_NSEMS_MAX,
1906 _SC_SEM_VALUE_MAX,
1907 _SC_SIGQUEUE_MAX,
1908 _SC_TIMER_MAX,
1909 _SC_BC_BASE_MAX,
1910 _SC_BC_DIM_MAX,
1911 _SC_BC_SCALE_MAX,
1912 _SC_BC_STRING_MAX,
1913 _SC_COLL_WEIGHTS_MAX,
1914 _SC_EQUIV_CLASS_MAX,
1915 _SC_EXPR_NEST_MAX,
1916 _SC_LINE_MAX,
1917 _SC_RE_DUP_MAX,
1918 _SC_CHARCLASS_NAME_MAX,
1919 _SC_2_VERSION,
1920 _SC_2_C_BIND,
1921 _SC_2_C_DEV,
1922 _SC_2_FORT_DEV,
1923 _SC_2_FORT_RUN,
1924 _SC_2_SW_DEV,
1925 _SC_2_LOCALEDEF,
1926 _SC_PII,
1927 _SC_PII_XTI,
1928 _SC_PII_SOCKET,
1929 _SC_PII_INTERNET,
1930 _SC_PII_OSI,
1931 _SC_POLL,
1932 _SC_SELECT,
1933 _SC_UIO_MAXIOV,
1934 _SC_IOV_MAX = _SC_UIO_MAXIOV,
1935 _SC_PII_INTERNET_STREAM,
1936 _SC_PII_INTERNET_DGRAM,
1937 _SC_PII_OSI_COTS,
1938 _SC_PII_OSI_CLTS,
1939 _SC_PII_OSI_M,
1940 _SC_T_IOV_MAX,
1941 _SC_THREADS,
1942 _SC_THREAD_SAFE_FUNCTIONS,
1943 _SC_GETGR_R_SIZE_MAX,
1944 _SC_GETPW_R_SIZE_MAX,
1945 _SC_LOGIN_NAME_MAX,
1946 _SC_TTY_NAME_MAX,
1947 _SC_THREAD_DESTRUCTOR_ITERATIONS,
1948 _SC_THREAD_KEYS_MAX,
1949 _SC_THREAD_STACK_MIN,
1950 _SC_THREAD_THREADS_MAX,
1951 _SC_THREAD_ATTR_STACKADDR,
1952 _SC_THREAD_ATTR_STACKSIZE,
1953 _SC_THREAD_PRIORITY_SCHEDULING,
1954 _SC_THREAD_PRIO_INHERIT,
1955 _SC_THREAD_PRIO_PROTECT,
1956 _SC_THREAD_PROCESS_SHARED,
1957 _SC_NPROCESSORS_CONF,
1958 _SC_NPROCESSORS_ONLN,
1959 _SC_PHYS_PAGES,
1960 _SC_AVPHYS_PAGES,
1961 _SC_ATEXIT_MAX,
1962 _SC_PASS_MAX,
1963 _SC_XOPEN_VERSION,
1964 _SC_XOPEN_XCU_VERSION,
1965 _SC_XOPEN_UNIX,
1966 _SC_XOPEN_CRYPT,
1967 _SC_XOPEN_ENH_I18N,
1968 _SC_XOPEN_SHM,
1969 _SC_2_CHAR_TERM,
1970 _SC_2_C_VERSION,
1971 _SC_2_UPE,
1972 _SC_XOPEN_XPG2,
1973 _SC_XOPEN_XPG3,
1974 _SC_XOPEN_XPG4,
1975 _SC_CHAR_BIT,
1976 _SC_CHAR_MAX,
1977 _SC_CHAR_MIN,
1978 _SC_INT_MAX,
1979 _SC_INT_MIN,
1980 _SC_LONG_BIT,
1981 _SC_WORD_BIT,
1982 _SC_MB_LEN_MAX,
1983 _SC_NZERO,
1984 _SC_SSIZE_MAX,
1985 _SC_SCHAR_MAX,
1986 _SC_SCHAR_MIN,
1987 _SC_SHRT_MAX,
1988 _SC_SHRT_MIN,
1989 _SC_UCHAR_MAX,
1990 _SC_UINT_MAX,
1991 _SC_ULONG_MAX,
1992 _SC_USHRT_MAX,
1993 _SC_NL_ARGMAX,
1994 _SC_NL_LANGMAX,
1995 _SC_NL_MSGMAX,
1996 _SC_NL_NMAX,
1997 _SC_NL_SETMAX,
1998 _SC_NL_TEXTMAX,
1999 _SC_XBS5_ILP32_OFF32,
2000 _SC_XBS5_ILP32_OFFBIG,
2001 _SC_XBS5_LP64_OFF64,
2002 _SC_XBS5_LPBIG_OFFBIG,
2003 _SC_XOPEN_LEGACY,
2004 _SC_XOPEN_REALTIME,
2005 _SC_XOPEN_REALTIME_THREADS,
2006 _SC_ADVISORY_INFO,
2007 _SC_BARRIERS,
2008 _SC_BASE,
2009 _SC_C_LANG_SUPPORT,
2010 _SC_C_LANG_SUPPORT_R,
2011 _SC_CLOCK_SELECTION,
2012 _SC_CPUTIME,
2013 _SC_THREAD_CPUTIME,
2014 _SC_DEVICE_IO,
2015 _SC_DEVICE_SPECIFIC,
2016 _SC_DEVICE_SPECIFIC_R,
2017 _SC_FD_MGMT,
2018 _SC_FIFO,
2019 _SC_PIPE,
2020 _SC_FILE_ATTRIBUTES,
2021 _SC_FILE_LOCKING,
2022 _SC_FILE_SYSTEM,
2023 _SC_MONOTONIC_CLOCK,
2024 _SC_MULTI_PROCESS,
2025 _SC_SINGLE_PROCESS,
2026 _SC_NETWORKING,
2027 _SC_READER_WRITER_LOCKS,
2028 _SC_SPIN_LOCKS,
2029 _SC_REGEXP,
2030 _SC_REGEX_VERSION,
2031 _SC_SHELL,
2032 _SC_SIGNALS,
2033 _SC_SPAWN,
2034 _SC_SPORADIC_SERVER,
2035 _SC_THREAD_SPORADIC_SERVER,
2036 _SC_SYSTEM_DATABASE,
2037 _SC_SYSTEM_DATABASE_R,
2038 _SC_TIMEOUTS,
2039 _SC_TYPED_MEMORY_OBJECTS,
2040 _SC_USER_GROUPS,
2041 _SC_USER_GROUPS_R,
2042 _SC_2_PBS,
2043 _SC_2_PBS_ACCOUNTING,
2044 _SC_2_PBS_LOCATE,
2045 _SC_2_PBS_MESSAGE,
2046 _SC_2_PBS_TRACK,
2047 _SC_SYMLOOP_MAX,
2048 _SC_STREAMS,
2049 _SC_2_PBS_CHECKPOINT,
2050 _SC_V6_ILP32_OFF32,
2051 _SC_V6_ILP32_OFFBIG,
2052 _SC_V6_LP64_OFF64,
2053 _SC_V6_LPBIG_OFFBIG,
2054 _SC_HOST_NAME_MAX,
2055 _SC_TRACE,
2056 _SC_TRACE_EVENT_FILTER,
2057 _SC_TRACE_INHERIT,
2058 _SC_TRACE_LOG,
2059 _SC_LEVEL1_ICACHE_SIZE,
2060 _SC_LEVEL1_ICACHE_ASSOC,
2061 _SC_LEVEL1_ICACHE_LINESIZE,
2062 _SC_LEVEL1_DCACHE_SIZE,
2063 _SC_LEVEL1_DCACHE_ASSOC,
2064 _SC_LEVEL1_DCACHE_LINESIZE,
2065 _SC_LEVEL2_CACHE_SIZE,
2066 _SC_LEVEL2_CACHE_ASSOC,
2067 _SC_LEVEL2_CACHE_LINESIZE,
2068 _SC_LEVEL3_CACHE_SIZE,
2069 _SC_LEVEL3_CACHE_ASSOC,
2070 _SC_LEVEL3_CACHE_LINESIZE,
2071 _SC_LEVEL4_CACHE_SIZE,
2072 _SC_LEVEL4_CACHE_ASSOC,
2073 _SC_LEVEL4_CACHE_LINESIZE,
2074 _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50,
2075 _SC_RAW_SOCKETS,
2076 _SC_V7_ILP32_OFF32,
2077 _SC_V7_ILP32_OFFBIG,
2078 _SC_V7_LP64_OFF64,
2079 _SC_V7_LPBIG_OFFBIG,
2080 _SC_SS_REPL_MAX,
2081 _SC_TRACE_EVENT_NAME_MAX,
2082 _SC_TRACE_NAME_MAX,
2083 _SC_TRACE_SYS_MAX,
2084 _SC_TRACE_USER_EVENT_MAX,
2085 _SC_XOPEN_STREAMS,
2086 _SC_THREAD_ROBUST_PRIO_INHERIT,
2087 _SC_THREAD_ROBUST_PRIO_PROTECT
2088 };
2089enum
2090 {
2091 _CS_PATH,
2092 _CS_V6_WIDTH_RESTRICTED_ENVS,
2093 _CS_GNU_LIBC_VERSION,
2094 _CS_GNU_LIBPTHREAD_VERSION,
2095 _CS_V5_WIDTH_RESTRICTED_ENVS,
2096 _CS_V7_WIDTH_RESTRICTED_ENVS,
2097 _CS_LFS_CFLAGS = 1000,
2098 _CS_LFS_LDFLAGS,
2099 _CS_LFS_LIBS,
2100 _CS_LFS_LINTFLAGS,
2101 _CS_LFS64_CFLAGS,
2102 _CS_LFS64_LDFLAGS,
2103 _CS_LFS64_LIBS,
2104 _CS_LFS64_LINTFLAGS,
2105 _CS_XBS5_ILP32_OFF32_CFLAGS = 1100,
2106 _CS_XBS5_ILP32_OFF32_LDFLAGS,
2107 _CS_XBS5_ILP32_OFF32_LIBS,
2108 _CS_XBS5_ILP32_OFF32_LINTFLAGS,
2109 _CS_XBS5_ILP32_OFFBIG_CFLAGS,
2110 _CS_XBS5_ILP32_OFFBIG_LDFLAGS,
2111 _CS_XBS5_ILP32_OFFBIG_LIBS,
2112 _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
2113 _CS_XBS5_LP64_OFF64_CFLAGS,
2114 _CS_XBS5_LP64_OFF64_LDFLAGS,
2115 _CS_XBS5_LP64_OFF64_LIBS,
2116 _CS_XBS5_LP64_OFF64_LINTFLAGS,
2117 _CS_XBS5_LPBIG_OFFBIG_CFLAGS,
2118 _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
2119 _CS_XBS5_LPBIG_OFFBIG_LIBS,
2120 _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
2121 _CS_POSIX_V6_ILP32_OFF32_CFLAGS,
2122 _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
2123 _CS_POSIX_V6_ILP32_OFF32_LIBS,
2124 _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
2125 _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
2126 _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
2127 _CS_POSIX_V6_ILP32_OFFBIG_LIBS,
2128 _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
2129 _CS_POSIX_V6_LP64_OFF64_CFLAGS,
2130 _CS_POSIX_V6_LP64_OFF64_LDFLAGS,
2131 _CS_POSIX_V6_LP64_OFF64_LIBS,
2132 _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
2133 _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
2134 _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
2135 _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
2136 _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
2137 _CS_POSIX_V7_ILP32_OFF32_CFLAGS,
2138 _CS_POSIX_V7_ILP32_OFF32_LDFLAGS,
2139 _CS_POSIX_V7_ILP32_OFF32_LIBS,
2140 _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS,
2141 _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS,
2142 _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS,
2143 _CS_POSIX_V7_ILP32_OFFBIG_LIBS,
2144 _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS,
2145 _CS_POSIX_V7_LP64_OFF64_CFLAGS,
2146 _CS_POSIX_V7_LP64_OFF64_LDFLAGS,
2147 _CS_POSIX_V7_LP64_OFF64_LIBS,
2148 _CS_POSIX_V7_LP64_OFF64_LINTFLAGS,
2149 _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS,
2150 _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS,
2151 _CS_POSIX_V7_LPBIG_OFFBIG_LIBS,
2152 _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS,
2153 _CS_V6_ENV,
2154 _CS_V7_ENV
2155 };
2156extern long int pathconf (const char *__path, int __name)
2157 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
2158extern long int fpathconf (int __fd, int __name) __attribute__ ((__nothrow__ , __leaf__));
2159extern long int sysconf (int __name) __attribute__ ((__nothrow__ , __leaf__));
2160extern size_t confstr (int __name, char *__buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__))
2161 __attribute__ ((__access__ (__write_only__, 2, 3)));
2162extern __pid_t getpid (void) __attribute__ ((__nothrow__ , __leaf__));
2163extern __pid_t getppid (void) __attribute__ ((__nothrow__ , __leaf__));
2164extern __pid_t getpgrp (void) __attribute__ ((__nothrow__ , __leaf__));
2165extern __pid_t __getpgid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));
2166extern __pid_t getpgid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));
2167extern int setpgid (__pid_t __pid, __pid_t __pgid) __attribute__ ((__nothrow__ , __leaf__));
2168extern int setpgrp (void) __attribute__ ((__nothrow__ , __leaf__));
2169extern __pid_t setsid (void) __attribute__ ((__nothrow__ , __leaf__));
2170extern __pid_t getsid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));
2171extern __uid_t getuid (void) __attribute__ ((__nothrow__ , __leaf__));
2172extern __uid_t geteuid (void) __attribute__ ((__nothrow__ , __leaf__));
2173extern __gid_t getgid (void) __attribute__ ((__nothrow__ , __leaf__));
2174extern __gid_t getegid (void) __attribute__ ((__nothrow__ , __leaf__));
2175extern int getgroups (int __size, __gid_t __list[]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__))
2176 __attribute__ ((__access__ (__write_only__, 2, 1)));
2177extern int group_member (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__));
2178extern int setuid (__uid_t __uid) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2179extern int setreuid (__uid_t __ruid, __uid_t __euid) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2180extern int seteuid (__uid_t __uid) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2181extern int setgid (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2182extern int setregid (__gid_t __rgid, __gid_t __egid) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2183extern int setegid (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2184extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid)
2185 __attribute__ ((__nothrow__ , __leaf__));
2186extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid)
2187 __attribute__ ((__nothrow__ , __leaf__));
2188extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid)
2189 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2190extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid)
2191 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2192extern __pid_t fork (void) __attribute__ ((__nothrow__));
2193extern __pid_t vfork (void) __attribute__ ((__nothrow__ , __leaf__));
2194extern char *ttyname (int __fd) __attribute__ ((__nothrow__ , __leaf__));
2195extern int ttyname_r (int __fd, char *__buf, size_t __buflen)
2196 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3)));
2197extern int isatty (int __fd) __attribute__ ((__nothrow__ , __leaf__));
2198extern int ttyslot (void) __attribute__ ((__nothrow__ , __leaf__));
2199extern int link (const char *__from, const char *__to)
2200 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__));
2201extern int linkat (int __fromfd, const char *__from, int __tofd,
2202 const char *__to, int __flags)
2203 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4))) __attribute__ ((__warn_unused_result__));
2204extern int symlink (const char *__from, const char *__to)
2205 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__));
2206extern ssize_t readlink (const char *__restrict __path,
2207 char *__restrict __buf, size_t __len)
2208 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3)));
2209extern int symlinkat (const char *__from, int __tofd,
2210 const char *__to) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3))) __attribute__ ((__warn_unused_result__));
2211extern ssize_t readlinkat (int __fd, const char *__restrict __path,
2212 char *__restrict __buf, size_t __len)
2213 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 3, 4)));
2214extern int unlink (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
2215extern int unlinkat (int __fd, const char *__name, int __flag)
2216 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
2217extern int rmdir (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
2218extern __pid_t tcgetpgrp (int __fd) __attribute__ ((__nothrow__ , __leaf__));
2219extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __attribute__ ((__nothrow__ , __leaf__));
2220extern char *getlogin (void);
2221extern int getlogin_r (char *__name, size_t __name_len) __attribute__ ((__nonnull__ (1)))
2222 __attribute__ ((__access__ (__write_only__, 1, 2)));
2223extern int setlogin (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
2224
2225extern char *optarg;
2226extern int optind;
2227extern int opterr;
2228extern int optopt;
2229extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
2230 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
2231
2232
2233
2234extern int gethostname (char *__name, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)))
2235 __attribute__ ((__access__ (__write_only__, 1, 2)));
2236extern int sethostname (const char *__name, size_t __len)
2237 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 1, 2)));
2238extern int sethostid (long int __id) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2239extern int getdomainname (char *__name, size_t __len)
2240 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2)));
2241extern int setdomainname (const char *__name, size_t __len)
2242 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 1, 2)));
2243extern int vhangup (void) __attribute__ ((__nothrow__ , __leaf__));
2244extern int revoke (const char *__file) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
2245extern int profil (unsigned short int *__sample_buffer, size_t __size,
2246 size_t __offset, unsigned int __scale)
2247 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
2248extern int acct (const char *__name) __attribute__ ((__nothrow__ , __leaf__));
2249extern char *getusershell (void) __attribute__ ((__nothrow__ , __leaf__));
2250extern void endusershell (void) __attribute__ ((__nothrow__ , __leaf__));
2251extern void setusershell (void) __attribute__ ((__nothrow__ , __leaf__));
2252extern int daemon (int __nochdir, int __noclose) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2253extern int chroot (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
2254extern char *getpass (const char *__prompt) __attribute__ ((__nonnull__ (1)));
2255extern int fsync (int __fd);
2256extern int syncfs (int __fd) __attribute__ ((__nothrow__ , __leaf__));
2257extern long int gethostid (void);
2258extern void sync (void) __attribute__ ((__nothrow__ , __leaf__));
2259extern int getpagesize (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2260extern int getdtablesize (void) __attribute__ ((__nothrow__ , __leaf__));
2261extern int truncate (const char *__file, __off_t __length)
2262 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
2263extern int truncate64 (const char *__file, __off64_t __length)
2264 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
2265extern int ftruncate (int __fd, __off_t __length) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2266extern int ftruncate64 (int __fd, __off64_t __length) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2267extern int brk (void *__addr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2268extern void *sbrk (intptr_t __delta) __attribute__ ((__nothrow__ , __leaf__));
2269extern long int syscall (long int __sysno, ...) __attribute__ ((__nothrow__ , __leaf__));
2270extern int lockf (int __fd, int __cmd, __off_t __len) __attribute__ ((__warn_unused_result__));
2271extern int lockf64 (int __fd, int __cmd, __off64_t __len) __attribute__ ((__warn_unused_result__));
2272ssize_t copy_file_range (int __infd, __off64_t *__pinoff,
2273 int __outfd, __off64_t *__poutoff,
2274 size_t __length, unsigned int __flags);
2275extern int fdatasync (int __fildes);
2276extern char *crypt (const char *__key, const char *__salt)
2277 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
2278extern void swab (const void *__restrict __from, void *__restrict __to,
2279 ssize_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)))
2280 __attribute__ ((__access__ (__read_only__, 1, 3)))
2281 __attribute__ ((__access__ (__write_only__, 2, 3)));
2282int getentropy (void *__buffer, size_t __length) __attribute__ ((__warn_unused_result__))
2283 __attribute__ ((__access__ (__write_only__, 1, 2)));
2284extern ssize_t __read_chk (int __fd, void *__buf, size_t __nbytes,
2285 size_t __buflen)
2286 __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3)));
2287extern ssize_t __read_alias (int __fd, void *__buf, size_t __nbytes) __asm__ ("" "read")
2288 __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3)));
2289extern ssize_t __read_chk_warn (int __fd, void *__buf, size_t __nbytes, size_t __buflen) __asm__ ("" "__read_chk")
2290 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("read called with bigger length than size of " "the destination buffer")));
2291extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) ssize_t
2292read (int __fd, void *__buf, size_t __nbytes)
2293{
2294 if (__builtin_object_size (__buf, 0) != (size_t) -1)
2295 {
2296 if (!__builtin_constant_p (__nbytes))
2297 return __read_chk (__fd, __buf, __nbytes, __builtin_object_size (__buf, 0));
2298 if (__nbytes > __builtin_object_size (__buf, 0))
2299 return __read_chk_warn (__fd, __buf, __nbytes,
2300 __builtin_object_size (__buf, 0));
2301 }
2302 return __read_alias (__fd, __buf, __nbytes);
2303}
2304extern ssize_t __pread_chk (int __fd, void *__buf, size_t __nbytes,
2305 __off_t __offset, size_t __bufsize)
2306 __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3)));
2307extern ssize_t __pread64_chk (int __fd, void *__buf, size_t __nbytes,
2308 __off64_t __offset, size_t __bufsize)
2309 __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3)));
2310extern ssize_t __pread_alias (int __fd, void *__buf, size_t __nbytes, __off_t __offset) __asm__ ("" "pread")
2311 __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3)));
2312extern ssize_t __pread64_alias (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pread64")
2313 __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3)));
2314extern ssize_t __pread_chk_warn (int __fd, void *__buf, size_t __nbytes, __off_t __offset, size_t __bufsize) __asm__ ("" "__pread_chk")
2315 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("pread called with bigger length than size of " "the destination buffer")));
2316extern ssize_t __pread64_chk_warn (int __fd, void *__buf, size_t __nbytes, __off64_t __offset, size_t __bufsize) __asm__ ("" "__pread64_chk")
2317 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("pread64 called with bigger length than size of " "the destination buffer")));
2318extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) ssize_t
2319pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset)
2320{
2321 if (__builtin_object_size (__buf, 0) != (size_t) -1)
2322 {
2323 if (!__builtin_constant_p (__nbytes))
2324 return __pread_chk (__fd, __buf, __nbytes, __offset,
2325 __builtin_object_size (__buf, 0));
2326 if ( __nbytes > __builtin_object_size (__buf, 0))
2327 return __pread_chk_warn (__fd, __buf, __nbytes, __offset,
2328 __builtin_object_size (__buf, 0));
2329 }
2330 return __pread_alias (__fd, __buf, __nbytes, __offset);
2331}
2332extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) ssize_t
2333pread64 (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)
2334{
2335 if (__builtin_object_size (__buf, 0) != (size_t) -1)
2336 {
2337 if (!__builtin_constant_p (__nbytes))
2338 return __pread64_chk (__fd, __buf, __nbytes, __offset,
2339 __builtin_object_size (__buf, 0));
2340 if ( __nbytes > __builtin_object_size (__buf, 0))
2341 return __pread64_chk_warn (__fd, __buf, __nbytes, __offset,
2342 __builtin_object_size (__buf, 0));
2343 }
2344 return __pread64_alias (__fd, __buf, __nbytes, __offset);
2345}
2346extern ssize_t __readlink_chk (const char *__restrict __path,
2347 char *__restrict __buf, size_t __len,
2348 size_t __buflen)
2349 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3)));
2350extern ssize_t __readlink_alias (const char *__restrict __path, char *__restrict __buf, size_t __len) __asm__ ("" "readlink") __attribute__ ((__nothrow__ , __leaf__))
2351 __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3)));
2352extern ssize_t __readlink_chk_warn (const char *__restrict __path, char *__restrict __buf, size_t __len, size_t __buflen) __asm__ ("" "__readlink_chk") __attribute__ ((__nothrow__ , __leaf__))
2353 __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("readlink called with bigger length " "than size of destination buffer")));
2354extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) ssize_t
2355__attribute__ ((__nothrow__ , __leaf__)) readlink (const char *__restrict __path, char *__restrict __buf, size_t __len)
2356{
2357 if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
2358 {
2359 if (!__builtin_constant_p (__len))
2360 return __readlink_chk (__path, __buf, __len, __builtin_object_size (__buf, 2 > 1));
2361 if ( __len > __builtin_object_size (__buf, 2 > 1))
2362 return __readlink_chk_warn (__path, __buf, __len,
2363 __builtin_object_size (__buf, 2 > 1));
2364 }
2365 return __readlink_alias (__path, __buf, __len);
2366}
2367extern ssize_t __readlinkat_chk (int __fd, const char *__restrict __path,
2368 char *__restrict __buf, size_t __len,
2369 size_t __buflen)
2370 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 3, 4)));
2371extern ssize_t __readlinkat_alias (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len) __asm__ ("" "readlinkat") __attribute__ ((__nothrow__ , __leaf__))
2372 __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 3, 4)));
2373extern ssize_t __readlinkat_chk_warn (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len, size_t __buflen) __asm__ ("" "__readlinkat_chk") __attribute__ ((__nothrow__ , __leaf__))
2374 __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("readlinkat called with bigger " "length than size of destination " "buffer")));
2375extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) ssize_t
2376__attribute__ ((__nothrow__ , __leaf__)) readlinkat (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len)
2377{
2378 if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
2379 {
2380 if (!__builtin_constant_p (__len))
2381 return __readlinkat_chk (__fd, __path, __buf, __len,
2382 __builtin_object_size (__buf, 2 > 1));
2383 if (__len > __builtin_object_size (__buf, 2 > 1))
2384 return __readlinkat_chk_warn (__fd, __path, __buf, __len,
2385 __builtin_object_size (__buf, 2 > 1));
2386 }
2387 return __readlinkat_alias (__fd, __path, __buf, __len);
2388}
2389extern char *__getcwd_chk (char *__buf, size_t __size, size_t __buflen)
2390 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2)));
2391extern char *__getcwd_alias (char *__buf, size_t __size) __asm__ ("" "getcwd") __attribute__ ((__nothrow__ , __leaf__))
2392 __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2)));
2393extern char *__getcwd_chk_warn (char *__buf, size_t __size, size_t __buflen) __asm__ ("" "__getcwd_chk") __attribute__ ((__nothrow__ , __leaf__))
2394 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("getcwd caller with bigger length than size of " "destination buffer")));
2395extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
2396__attribute__ ((__nothrow__ , __leaf__)) getcwd (char *__buf, size_t __size)
2397{
2398 if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
2399 {
2400 if (!__builtin_constant_p (__size))
2401 return __getcwd_chk (__buf, __size, __builtin_object_size (__buf, 2 > 1));
2402 if (__size > __builtin_object_size (__buf, 2 > 1))
2403 return __getcwd_chk_warn (__buf, __size, __builtin_object_size (__buf, 2 > 1));
2404 }
2405 return __getcwd_alias (__buf, __size);
2406}
2407extern char *__getwd_chk (char *__buf, size_t buflen)
2408 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2)));
2409extern char *__getwd_warn (char *__buf) __asm__ ("" "getwd") __attribute__ ((__nothrow__ , __leaf__))
2410 __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("please use getcwd instead, as getwd " "doesn't specify buffer size")));
2411extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) __attribute__ ((__warn_unused_result__)) char *
2412__attribute__ ((__nothrow__ , __leaf__)) getwd (char *__buf)
2413{
2414 if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
2415 return __getwd_chk (__buf, __builtin_object_size (__buf, 2 > 1));
2416 return __getwd_warn (__buf);
2417}
2418extern size_t __confstr_chk (int __name, char *__buf, size_t __len,
2419 size_t __buflen) __attribute__ ((__nothrow__ , __leaf__))
2420 __attribute__ ((__access__ (__write_only__, 2, 3)));
2421extern size_t __confstr_alias (int __name, char *__buf, size_t __len) __asm__ ("" "confstr") __attribute__ ((__nothrow__ , __leaf__))
2422 __attribute__ ((__access__ (__write_only__, 2, 3)));
2423extern size_t __confstr_chk_warn (int __name, char *__buf, size_t __len, size_t __buflen) __asm__ ("" "__confstr_chk") __attribute__ ((__nothrow__ , __leaf__))
2424 __attribute__((__warning__ ("confstr called with bigger length than size of destination " "buffer")));
2425extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
2426__attribute__ ((__nothrow__ , __leaf__)) confstr (int __name, char *__buf, size_t __len)
2427{
2428 if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
2429 {
2430 if (!__builtin_constant_p (__len))
2431 return __confstr_chk (__name, __buf, __len, __builtin_object_size (__buf, 2 > 1));
2432 if (__builtin_object_size (__buf, 2 > 1) < __len)
2433 return __confstr_chk_warn (__name, __buf, __len,
2434 __builtin_object_size (__buf, 2 > 1));
2435 }
2436 return __confstr_alias (__name, __buf, __len);
2437}
2438extern int __getgroups_chk (int __size, __gid_t __list[], size_t __listlen)
2439 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 1)));
2440extern int __getgroups_alias (int __size, __gid_t __list[]) __asm__ ("" "getgroups") __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 1)));
2441extern int __getgroups_chk_warn (int __size, __gid_t __list[], size_t __listlen) __asm__ ("" "__getgroups_chk") __attribute__ ((__nothrow__ , __leaf__))
2442 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("getgroups called with bigger group count than what " "can fit into destination buffer")));
2443extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
2444__attribute__ ((__nothrow__ , __leaf__)) getgroups (int __size, __gid_t __list[])
2445{
2446 if (__builtin_object_size (__list, 2 > 1) != (size_t) -1)
2447 {
2448 if (!__builtin_constant_p (__size) || __size < 0)
2449 return __getgroups_chk (__size, __list, __builtin_object_size (__list, 2 > 1));
2450 if (__size * sizeof (__gid_t) > __builtin_object_size (__list, 2 > 1))
2451 return __getgroups_chk_warn (__size, __list, __builtin_object_size (__list, 2 > 1));
2452 }
2453 return __getgroups_alias (__size, __list);
2454}
2455extern int __ttyname_r_chk (int __fd, char *__buf, size_t __buflen,
2456 size_t __nreal) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)))
2457 __attribute__ ((__access__ (__write_only__, 2, 3)));
2458extern int __ttyname_r_alias (int __fd, char *__buf, size_t __buflen) __asm__ ("" "ttyname_r") __attribute__ ((__nothrow__ , __leaf__))
2459 __attribute__ ((__nonnull__ (2)));
2460extern int __ttyname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) __asm__ ("" "__ttyname_r_chk") __attribute__ ((__nothrow__ , __leaf__))
2461 __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ttyname_r called with bigger buflen than " "size of destination buffer")));
2462extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
2463__attribute__ ((__nothrow__ , __leaf__)) ttyname_r (int __fd, char *__buf, size_t __buflen)
2464{
2465 if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
2466 {
2467 if (!__builtin_constant_p (__buflen))
2468 return __ttyname_r_chk (__fd, __buf, __buflen,
2469 __builtin_object_size (__buf, 2 > 1));
2470 if (__buflen > __builtin_object_size (__buf, 2 > 1))
2471 return __ttyname_r_chk_warn (__fd, __buf, __buflen,
2472 __builtin_object_size (__buf, 2 > 1));
2473 }
2474 return __ttyname_r_alias (__fd, __buf, __buflen);
2475}
2476extern int __getlogin_r_chk (char *__buf, size_t __buflen, size_t __nreal)
2477 __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__write_only__, 1, 2)));
2478extern int __getlogin_r_alias (char *__buf, size_t __buflen) __asm__ ("" "getlogin_r") __attribute__ ((__nonnull__ (1)));
2479extern int __getlogin_r_chk_warn (char *__buf, size_t __buflen, size_t __nreal) __asm__ ("" "__getlogin_r_chk")
2480 __attribute__ ((__nonnull__ (1))) __attribute__((__warning__ ("getlogin_r called with bigger buflen than " "size of destination buffer")));
2481extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
2482getlogin_r (char *__buf, size_t __buflen)
2483{
2484 if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
2485 {
2486 if (!__builtin_constant_p (__buflen))
2487 return __getlogin_r_chk (__buf, __buflen, __builtin_object_size (__buf, 2 > 1));
2488 if (__buflen > __builtin_object_size (__buf, 2 > 1))
2489 return __getlogin_r_chk_warn (__buf, __buflen,
2490 __builtin_object_size (__buf, 2 > 1));
2491 }
2492 return __getlogin_r_alias (__buf, __buflen);
2493}
2494extern int __gethostname_chk (char *__buf, size_t __buflen, size_t __nreal)
2495 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__write_only__, 1, 2)));
2496extern int __gethostname_alias (char *__buf, size_t __buflen) __asm__ ("" "gethostname") __attribute__ ((__nothrow__ , __leaf__))
2497 __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__write_only__, 1, 2)));
2498extern int __gethostname_chk_warn (char *__buf, size_t __buflen, size_t __nreal) __asm__ ("" "__gethostname_chk") __attribute__ ((__nothrow__ , __leaf__))
2499 __attribute__ ((__nonnull__ (1))) __attribute__((__warning__ ("gethostname called with bigger buflen than " "size of destination buffer")));
2500extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
2501__attribute__ ((__nothrow__ , __leaf__)) gethostname (char *__buf, size_t __buflen)
2502{
2503 if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
2504 {
2505 if (!__builtin_constant_p (__buflen))
2506 return __gethostname_chk (__buf, __buflen, __builtin_object_size (__buf, 2 > 1));
2507 if (__buflen > __builtin_object_size (__buf, 2 > 1))
2508 return __gethostname_chk_warn (__buf, __buflen,
2509 __builtin_object_size (__buf, 2 > 1));
2510 }
2511 return __gethostname_alias (__buf, __buflen);
2512}
2513extern int __getdomainname_chk (char *__buf, size_t __buflen, size_t __nreal)
2514 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2)));
2515extern int __getdomainname_alias (char *__buf, size_t __buflen) __asm__ ("" "getdomainname") __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)))
2516 __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2)));
2517extern int __getdomainname_chk_warn (char *__buf, size_t __buflen, size_t __nreal) __asm__ ("" "__getdomainname_chk") __attribute__ ((__nothrow__ , __leaf__))
2518 __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("getdomainname called with bigger " "buflen than size of destination " "buffer")));
2519extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
2520__attribute__ ((__nothrow__ , __leaf__)) getdomainname (char *__buf, size_t __buflen)
2521{
2522 if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
2523 {
2524 if (!__builtin_constant_p (__buflen))
2525 return __getdomainname_chk (__buf, __buflen, __builtin_object_size (__buf, 2 > 1));
2526 if (__buflen > __builtin_object_size (__buf, 2 > 1))
2527 return __getdomainname_chk_warn (__buf, __buflen,
2528 __builtin_object_size (__buf, 2 > 1));
2529 }
2530 return __getdomainname_alias (__buf, __buflen);
2531}
2532extern __pid_t gettid (void) __attribute__ ((__nothrow__ , __leaf__));
2533
2534
2535
2536[[nodiscard]]
2537__attribute__((__malloc__))
2538__attribute__((__returns_nonnull__))
2539__attribute__((__alloc_size__ (1)))
2540void *ruby_xmalloc(size_t size)
2541
2542;
2543[[nodiscard]]
2544__attribute__((__malloc__))
2545__attribute__((__returns_nonnull__))
2546__attribute__((__alloc_size__ (1,2)))
2547void *ruby_xmalloc2(size_t nelems, size_t elemsiz)
2548
2549;
2550[[nodiscard]]
2551__attribute__((__malloc__))
2552__attribute__((__returns_nonnull__))
2553__attribute__((__alloc_size__ (1,2)))
2554void *ruby_xcalloc(size_t nelems, size_t elemsiz)
2555
2556;
2557[[nodiscard]]
2558__attribute__((__returns_nonnull__))
2559__attribute__((__alloc_size__ (2)))
2560void *ruby_xrealloc(void *ptr, size_t newsiz)
2561
2562;
2563[[nodiscard]]
2564__attribute__((__returns_nonnull__))
2565__attribute__((__alloc_size__ (2,3)))
2566void *ruby_xrealloc2(void *ptr, size_t newelems, size_t newsiz)
2567
2568;
2569void ruby_xfree(void *ptr)
2570
2571;
2572
2573
2574#define RBIMPL_ATTR_COLD_H
2575#define RBIMPL_ATTR_COLD() __attribute__((__cold__))
2576
2577
2578__attribute__((__noreturn__))
2579__attribute__((__cold__))
2580void rb_assert_failure(const char *file, int line, const char *name, const char *expr);
2581
2582
2583#define COLDFUNC RBIMPL_ATTR_COLD()
2584
2585typedef float float_t;
2586typedef double double_t;
2587enum
2588 {
2589 FP_INT_UPWARD =
2590 0,
2591 FP_INT_DOWNWARD =
2592 1,
2593 FP_INT_TOWARDZERO =
2594 2,
2595 FP_INT_TONEARESTFROMZERO =
2596 3,
2597 FP_INT_TONEAREST =
2598 4,
2599 };
2600extern int __fpclassify (double __value) __attribute__ ((__nothrow__ , __leaf__))
2601 __attribute__ ((__const__));
2602extern int __signbit (double __value) __attribute__ ((__nothrow__ , __leaf__))
2603 __attribute__ ((__const__));
2604extern int __isinf (double __value) __attribute__ ((__nothrow__ , __leaf__))
2605 __attribute__ ((__const__));
2606extern int __finite (double __value) __attribute__ ((__nothrow__ , __leaf__))
2607 __attribute__ ((__const__));
2608extern int __isnan (double __value) __attribute__ ((__nothrow__ , __leaf__))
2609 __attribute__ ((__const__));
2610extern int __iseqsig (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__));
2611extern int __issignaling (double __value) __attribute__ ((__nothrow__ , __leaf__))
2612 __attribute__ ((__const__));
2613extern double acos (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __acos (double __x) __attribute__ ((__nothrow__ , __leaf__));
2614extern double asin (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __asin (double __x) __attribute__ ((__nothrow__ , __leaf__));
2615extern double atan (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __atan (double __x) __attribute__ ((__nothrow__ , __leaf__));
2616extern double atan2 (double __y, double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __atan2 (double __y, double __x) __attribute__ ((__nothrow__ , __leaf__));
2617 extern double cos (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __cos (double __x) __attribute__ ((__nothrow__ , __leaf__));
2618 extern double sin (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __sin (double __x) __attribute__ ((__nothrow__ , __leaf__));
2619extern double tan (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __tan (double __x) __attribute__ ((__nothrow__ , __leaf__));
2620extern double cosh (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __cosh (double __x) __attribute__ ((__nothrow__ , __leaf__));
2621extern double sinh (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __sinh (double __x) __attribute__ ((__nothrow__ , __leaf__));
2622extern double tanh (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __tanh (double __x) __attribute__ ((__nothrow__ , __leaf__));
2623 extern void sincos (double __x, double *__sinx, double *__cosx) __attribute__ ((__nothrow__ , __leaf__)); extern void __sincos (double __x, double *__sinx, double *__cosx) __attribute__ ((__nothrow__ , __leaf__));
2624extern double acosh (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __acosh (double __x) __attribute__ ((__nothrow__ , __leaf__));
2625extern double asinh (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __asinh (double __x) __attribute__ ((__nothrow__ , __leaf__));
2626extern double atanh (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __atanh (double __x) __attribute__ ((__nothrow__ , __leaf__));
2627 extern double exp (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __exp (double __x) __attribute__ ((__nothrow__ , __leaf__));
2628extern double frexp (double __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__)); extern double __frexp (double __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__));
2629extern double ldexp (double __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__)); extern double __ldexp (double __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__));
2630 extern double log (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __log (double __x) __attribute__ ((__nothrow__ , __leaf__));
2631extern double log10 (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __log10 (double __x) __attribute__ ((__nothrow__ , __leaf__));
2632extern double modf (double __x, double *__iptr) __attribute__ ((__nothrow__ , __leaf__)); extern double __modf (double __x, double *__iptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
2633extern double exp10 (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __exp10 (double __x) __attribute__ ((__nothrow__ , __leaf__));
2634extern double expm1 (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __expm1 (double __x) __attribute__ ((__nothrow__ , __leaf__));
2635extern double log1p (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __log1p (double __x) __attribute__ ((__nothrow__ , __leaf__));
2636extern double logb (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __logb (double __x) __attribute__ ((__nothrow__ , __leaf__));
2637extern double exp2 (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __exp2 (double __x) __attribute__ ((__nothrow__ , __leaf__));
2638extern double log2 (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __log2 (double __x) __attribute__ ((__nothrow__ , __leaf__));
2639 extern double pow (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)); extern double __pow (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__));
2640extern double sqrt (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __sqrt (double __x) __attribute__ ((__nothrow__ , __leaf__));
2641extern double hypot (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)); extern double __hypot (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__));
2642extern double cbrt (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __cbrt (double __x) __attribute__ ((__nothrow__ , __leaf__));
2643extern double ceil (double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern double __ceil (double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2644extern double fabs (double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern double __fabs (double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2645extern double floor (double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern double __floor (double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2646extern double fmod (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)); extern double __fmod (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__));
2647extern int isinf (double __value) __attribute__ ((__nothrow__ , __leaf__))
2648 __attribute__ ((__const__));
2649extern int finite (double __value) __attribute__ ((__nothrow__ , __leaf__))
2650 __attribute__ ((__const__));
2651extern double drem (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)); extern double __drem (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__));
2652extern double significand (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __significand (double __x) __attribute__ ((__nothrow__ , __leaf__));
2653extern double copysign (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern double __copysign (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2654extern double nan (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__)); extern double __nan (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__));
2655extern int isnan (double __value) __attribute__ ((__nothrow__ , __leaf__))
2656 __attribute__ ((__const__));
2657extern double j0 (double) __attribute__ ((__nothrow__ , __leaf__)); extern double __j0 (double) __attribute__ ((__nothrow__ , __leaf__));
2658extern double j1 (double) __attribute__ ((__nothrow__ , __leaf__)); extern double __j1 (double) __attribute__ ((__nothrow__ , __leaf__));
2659extern double jn (int, double) __attribute__ ((__nothrow__ , __leaf__)); extern double __jn (int, double) __attribute__ ((__nothrow__ , __leaf__));
2660extern double y0 (double) __attribute__ ((__nothrow__ , __leaf__)); extern double __y0 (double) __attribute__ ((__nothrow__ , __leaf__));
2661extern double y1 (double) __attribute__ ((__nothrow__ , __leaf__)); extern double __y1 (double) __attribute__ ((__nothrow__ , __leaf__));
2662extern double yn (int, double) __attribute__ ((__nothrow__ , __leaf__)); extern double __yn (int, double) __attribute__ ((__nothrow__ , __leaf__));
2663extern double erf (double) __attribute__ ((__nothrow__ , __leaf__)); extern double __erf (double) __attribute__ ((__nothrow__ , __leaf__));
2664extern double erfc (double) __attribute__ ((__nothrow__ , __leaf__)); extern double __erfc (double) __attribute__ ((__nothrow__ , __leaf__));
2665extern double lgamma (double) __attribute__ ((__nothrow__ , __leaf__)); extern double __lgamma (double) __attribute__ ((__nothrow__ , __leaf__));
2666extern double tgamma (double) __attribute__ ((__nothrow__ , __leaf__)); extern double __tgamma (double) __attribute__ ((__nothrow__ , __leaf__));
2667extern double gamma (double) __attribute__ ((__nothrow__ , __leaf__)); extern double __gamma (double) __attribute__ ((__nothrow__ , __leaf__));
2668extern double lgamma_r (double, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__)); extern double __lgamma_r (double, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__));
2669extern double rint (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __rint (double __x) __attribute__ ((__nothrow__ , __leaf__));
2670extern double nextafter (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)); extern double __nextafter (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__));
2671extern double nexttoward (double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)); extern double __nexttoward (double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
2672extern double nextdown (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __nextdown (double __x) __attribute__ ((__nothrow__ , __leaf__));
2673extern double nextup (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __nextup (double __x) __attribute__ ((__nothrow__ , __leaf__));
2674extern double remainder (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)); extern double __remainder (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__));
2675extern double scalbn (double __x, int __n) __attribute__ ((__nothrow__ , __leaf__)); extern double __scalbn (double __x, int __n) __attribute__ ((__nothrow__ , __leaf__));
2676extern int ilogb (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern int __ilogb (double __x) __attribute__ ((__nothrow__ , __leaf__));
2677extern long int llogb (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __llogb (double __x) __attribute__ ((__nothrow__ , __leaf__));
2678extern double scalbln (double __x, long int __n) __attribute__ ((__nothrow__ , __leaf__)); extern double __scalbln (double __x, long int __n) __attribute__ ((__nothrow__ , __leaf__));
2679extern double nearbyint (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern double __nearbyint (double __x) __attribute__ ((__nothrow__ , __leaf__));
2680extern double round (double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern double __round (double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2681extern double trunc (double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern double __trunc (double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2682extern double remquo (double __x, double __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__)); extern double __remquo (double __x, double __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__));
2683extern long int lrint (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lrint (double __x) __attribute__ ((__nothrow__ , __leaf__));
2684__extension__
2685extern long long int llrint (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llrint (double __x) __attribute__ ((__nothrow__ , __leaf__));
2686extern long int lround (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lround (double __x) __attribute__ ((__nothrow__ , __leaf__));
2687__extension__
2688extern long long int llround (double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llround (double __x) __attribute__ ((__nothrow__ , __leaf__));
2689extern double fdim (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)); extern double __fdim (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__));
2690extern double fmax (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern double __fmax (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2691extern double fmin (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern double __fmin (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2692extern double fma (double __x, double __y, double __z) __attribute__ ((__nothrow__ , __leaf__)); extern double __fma (double __x, double __y, double __z) __attribute__ ((__nothrow__ , __leaf__));
2693extern double roundeven (double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern double __roundeven (double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2694extern __intmax_t fromfp (double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfp (double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
2695extern __uintmax_t ufromfp (double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfp (double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
2696extern __intmax_t fromfpx (double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpx (double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
2697extern __uintmax_t ufromfpx (double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpx (double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
2698extern double fmaxmag (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern double __fmaxmag (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2699extern double fminmag (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern double __fminmag (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2700extern int canonicalize (double *__cx, const double *__x) __attribute__ ((__nothrow__ , __leaf__));
2701extern int totalorder (const double *__x, const double *__y) __attribute__ ((__nothrow__ , __leaf__))
2702 __attribute__ ((__pure__));
2703extern int totalordermag (const double *__x, const double *__y) __attribute__ ((__nothrow__ , __leaf__))
2704 __attribute__ ((__pure__));
2705extern double getpayload (const double *__x) __attribute__ ((__nothrow__ , __leaf__)); extern double __getpayload (const double *__x) __attribute__ ((__nothrow__ , __leaf__));
2706extern int setpayload (double *__x, double __payload) __attribute__ ((__nothrow__ , __leaf__));
2707extern int setpayloadsig (double *__x, double __payload) __attribute__ ((__nothrow__ , __leaf__));
2708extern double scalb (double __x, double __n) __attribute__ ((__nothrow__ , __leaf__)); extern double __scalb (double __x, double __n) __attribute__ ((__nothrow__ , __leaf__));
2709extern int __fpclassifyf (float __value) __attribute__ ((__nothrow__ , __leaf__))
2710 __attribute__ ((__const__));
2711extern int __signbitf (float __value) __attribute__ ((__nothrow__ , __leaf__))
2712 __attribute__ ((__const__));
2713extern int __isinff (float __value) __attribute__ ((__nothrow__ , __leaf__))
2714 __attribute__ ((__const__));
2715extern int __finitef (float __value) __attribute__ ((__nothrow__ , __leaf__))
2716 __attribute__ ((__const__));
2717extern int __isnanf (float __value) __attribute__ ((__nothrow__ , __leaf__))
2718 __attribute__ ((__const__));
2719extern int __iseqsigf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__));
2720extern int __issignalingf (float __value) __attribute__ ((__nothrow__ , __leaf__))
2721 __attribute__ ((__const__));
2722extern float acosf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __acosf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2723extern float asinf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __asinf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2724extern float atanf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __atanf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2725extern float atan2f (float __y, float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __atan2f (float __y, float __x) __attribute__ ((__nothrow__ , __leaf__));
2726 extern float cosf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __cosf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2727 extern float sinf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __sinf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2728extern float tanf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __tanf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2729extern float coshf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __coshf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2730extern float sinhf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __sinhf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2731extern float tanhf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __tanhf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2732 extern void sincosf (float __x, float *__sinx, float *__cosx) __attribute__ ((__nothrow__ , __leaf__)); extern void __sincosf (float __x, float *__sinx, float *__cosx) __attribute__ ((__nothrow__ , __leaf__));
2733extern float acoshf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __acoshf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2734extern float asinhf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __asinhf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2735extern float atanhf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __atanhf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2736 extern float expf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __expf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2737extern float frexpf (float __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__)); extern float __frexpf (float __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__));
2738extern float ldexpf (float __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__)); extern float __ldexpf (float __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__));
2739 extern float logf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __logf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2740extern float log10f (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __log10f (float __x) __attribute__ ((__nothrow__ , __leaf__));
2741extern float modff (float __x, float *__iptr) __attribute__ ((__nothrow__ , __leaf__)); extern float __modff (float __x, float *__iptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
2742extern float exp10f (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __exp10f (float __x) __attribute__ ((__nothrow__ , __leaf__));
2743extern float expm1f (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __expm1f (float __x) __attribute__ ((__nothrow__ , __leaf__));
2744extern float log1pf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __log1pf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2745extern float logbf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __logbf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2746extern float exp2f (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __exp2f (float __x) __attribute__ ((__nothrow__ , __leaf__));
2747extern float log2f (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __log2f (float __x) __attribute__ ((__nothrow__ , __leaf__));
2748 extern float powf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)); extern float __powf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__));
2749extern float sqrtf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __sqrtf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2750extern float hypotf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)); extern float __hypotf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__));
2751extern float cbrtf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __cbrtf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2752extern float ceilf (float __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern float __ceilf (float __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2753extern float fabsf (float __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern float __fabsf (float __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2754extern float floorf (float __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern float __floorf (float __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2755extern float fmodf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)); extern float __fmodf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__));
2756extern int isinff (float __value) __attribute__ ((__nothrow__ , __leaf__))
2757 __attribute__ ((__const__));
2758extern int finitef (float __value) __attribute__ ((__nothrow__ , __leaf__))
2759 __attribute__ ((__const__));
2760extern float dremf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)); extern float __dremf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__));
2761extern float significandf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __significandf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2762extern float copysignf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2763extern float nanf (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__)); extern float __nanf (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__));
2764extern int isnanf (float __value) __attribute__ ((__nothrow__ , __leaf__))
2765 __attribute__ ((__const__));
2766extern float j0f (float) __attribute__ ((__nothrow__ , __leaf__)); extern float __j0f (float) __attribute__ ((__nothrow__ , __leaf__));
2767extern float j1f (float) __attribute__ ((__nothrow__ , __leaf__)); extern float __j1f (float) __attribute__ ((__nothrow__ , __leaf__));
2768extern float jnf (int, float) __attribute__ ((__nothrow__ , __leaf__)); extern float __jnf (int, float) __attribute__ ((__nothrow__ , __leaf__));
2769extern float y0f (float) __attribute__ ((__nothrow__ , __leaf__)); extern float __y0f (float) __attribute__ ((__nothrow__ , __leaf__));
2770extern float y1f (float) __attribute__ ((__nothrow__ , __leaf__)); extern float __y1f (float) __attribute__ ((__nothrow__ , __leaf__));
2771extern float ynf (int, float) __attribute__ ((__nothrow__ , __leaf__)); extern float __ynf (int, float) __attribute__ ((__nothrow__ , __leaf__));
2772extern float erff (float) __attribute__ ((__nothrow__ , __leaf__)); extern float __erff (float) __attribute__ ((__nothrow__ , __leaf__));
2773extern float erfcf (float) __attribute__ ((__nothrow__ , __leaf__)); extern float __erfcf (float) __attribute__ ((__nothrow__ , __leaf__));
2774extern float lgammaf (float) __attribute__ ((__nothrow__ , __leaf__)); extern float __lgammaf (float) __attribute__ ((__nothrow__ , __leaf__));
2775extern float tgammaf (float) __attribute__ ((__nothrow__ , __leaf__)); extern float __tgammaf (float) __attribute__ ((__nothrow__ , __leaf__));
2776extern float gammaf (float) __attribute__ ((__nothrow__ , __leaf__)); extern float __gammaf (float) __attribute__ ((__nothrow__ , __leaf__));
2777extern float lgammaf_r (float, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__)); extern float __lgammaf_r (float, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__));
2778extern float rintf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __rintf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2779extern float nextafterf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)); extern float __nextafterf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__));
2780extern float nexttowardf (float __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)); extern float __nexttowardf (float __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
2781extern float nextdownf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __nextdownf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2782extern float nextupf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __nextupf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2783extern float remainderf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)); extern float __remainderf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__));
2784extern float scalbnf (float __x, int __n) __attribute__ ((__nothrow__ , __leaf__)); extern float __scalbnf (float __x, int __n) __attribute__ ((__nothrow__ , __leaf__));
2785extern int ilogbf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern int __ilogbf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2786extern long int llogbf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __llogbf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2787extern float scalblnf (float __x, long int __n) __attribute__ ((__nothrow__ , __leaf__)); extern float __scalblnf (float __x, long int __n) __attribute__ ((__nothrow__ , __leaf__));
2788extern float nearbyintf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern float __nearbyintf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2789extern float roundf (float __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern float __roundf (float __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2790extern float truncf (float __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern float __truncf (float __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2791extern float remquof (float __x, float __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__)); extern float __remquof (float __x, float __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__));
2792extern long int lrintf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lrintf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2793__extension__
2794extern long long int llrintf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llrintf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2795extern long int lroundf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lroundf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2796__extension__
2797extern long long int llroundf (float __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llroundf (float __x) __attribute__ ((__nothrow__ , __leaf__));
2798extern float fdimf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)); extern float __fdimf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__));
2799extern float fmaxf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern float __fmaxf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2800extern float fminf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern float __fminf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2801extern float fmaf (float __x, float __y, float __z) __attribute__ ((__nothrow__ , __leaf__)); extern float __fmaf (float __x, float __y, float __z) __attribute__ ((__nothrow__ , __leaf__));
2802extern float roundevenf (float __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern float __roundevenf (float __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2803extern __intmax_t fromfpf (float __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpf (float __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
2804extern __uintmax_t ufromfpf (float __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpf (float __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
2805extern __intmax_t fromfpxf (float __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpxf (float __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
2806extern __uintmax_t ufromfpxf (float __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpxf (float __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
2807extern float fmaxmagf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern float __fmaxmagf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2808extern float fminmagf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern float __fminmagf (float __x, float __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2809extern int canonicalizef (float *__cx, const float *__x) __attribute__ ((__nothrow__ , __leaf__));
2810extern int totalorderf (const float *__x, const float *__y) __attribute__ ((__nothrow__ , __leaf__))
2811 __attribute__ ((__pure__));
2812extern int totalordermagf (const float *__x, const float *__y) __attribute__ ((__nothrow__ , __leaf__))
2813 __attribute__ ((__pure__));
2814extern float getpayloadf (const float *__x) __attribute__ ((__nothrow__ , __leaf__)); extern float __getpayloadf (const float *__x) __attribute__ ((__nothrow__ , __leaf__));
2815extern int setpayloadf (float *__x, float __payload) __attribute__ ((__nothrow__ , __leaf__));
2816extern int setpayloadsigf (float *__x, float __payload) __attribute__ ((__nothrow__ , __leaf__));
2817extern float scalbf (float __x, float __n) __attribute__ ((__nothrow__ , __leaf__)); extern float __scalbf (float __x, float __n) __attribute__ ((__nothrow__ , __leaf__));
2818extern int __fpclassifyl (long double __value) __attribute__ ((__nothrow__ , __leaf__))
2819 __attribute__ ((__const__));
2820extern int __signbitl (long double __value) __attribute__ ((__nothrow__ , __leaf__))
2821 __attribute__ ((__const__));
2822extern int __isinfl (long double __value) __attribute__ ((__nothrow__ , __leaf__))
2823 __attribute__ ((__const__));
2824extern int __finitel (long double __value) __attribute__ ((__nothrow__ , __leaf__))
2825 __attribute__ ((__const__));
2826extern int __isnanl (long double __value) __attribute__ ((__nothrow__ , __leaf__))
2827 __attribute__ ((__const__));
2828extern int __iseqsigl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
2829extern int __issignalingl (long double __value) __attribute__ ((__nothrow__ , __leaf__))
2830 __attribute__ ((__const__));
2831extern long double acosl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __acosl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2832extern long double asinl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __asinl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2833extern long double atanl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __atanl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2834extern long double atan2l (long double __y, long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __atan2l (long double __y, long double __x) __attribute__ ((__nothrow__ , __leaf__));
2835 extern long double cosl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __cosl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2836 extern long double sinl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __sinl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2837extern long double tanl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __tanl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2838extern long double coshl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __coshl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2839extern long double sinhl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __sinhl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2840extern long double tanhl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __tanhl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2841 extern void sincosl (long double __x, long double *__sinx, long double *__cosx) __attribute__ ((__nothrow__ , __leaf__)); extern void __sincosl (long double __x, long double *__sinx, long double *__cosx) __attribute__ ((__nothrow__ , __leaf__));
2842extern long double acoshl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __acoshl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2843extern long double asinhl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __asinhl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2844extern long double atanhl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __atanhl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2845 extern long double expl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __expl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2846extern long double frexpl (long double __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__)); extern long double __frexpl (long double __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__));
2847extern long double ldexpl (long double __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__)); extern long double __ldexpl (long double __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__));
2848 extern long double logl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __logl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2849extern long double log10l (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __log10l (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2850extern long double modfl (long double __x, long double *__iptr) __attribute__ ((__nothrow__ , __leaf__)); extern long double __modfl (long double __x, long double *__iptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
2851extern long double exp10l (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __exp10l (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2852extern long double expm1l (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __expm1l (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2853extern long double log1pl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __log1pl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2854extern long double logbl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __logbl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2855extern long double exp2l (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __exp2l (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2856extern long double log2l (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __log2l (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2857 extern long double powl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)); extern long double __powl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
2858extern long double sqrtl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __sqrtl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2859extern long double hypotl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)); extern long double __hypotl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
2860extern long double cbrtl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __cbrtl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2861extern long double ceill (long double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern long double __ceill (long double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2862extern long double fabsl (long double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern long double __fabsl (long double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2863extern long double floorl (long double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern long double __floorl (long double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2864extern long double fmodl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)); extern long double __fmodl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
2865extern int isinfl (long double __value) __attribute__ ((__nothrow__ , __leaf__))
2866 __attribute__ ((__const__));
2867extern int finitel (long double __value) __attribute__ ((__nothrow__ , __leaf__))
2868 __attribute__ ((__const__));
2869extern long double dreml (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)); extern long double __dreml (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
2870extern long double significandl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __significandl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2871extern long double copysignl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2872extern long double nanl (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__)); extern long double __nanl (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__));
2873extern int isnanl (long double __value) __attribute__ ((__nothrow__ , __leaf__))
2874 __attribute__ ((__const__));
2875extern long double j0l (long double) __attribute__ ((__nothrow__ , __leaf__)); extern long double __j0l (long double) __attribute__ ((__nothrow__ , __leaf__));
2876extern long double j1l (long double) __attribute__ ((__nothrow__ , __leaf__)); extern long double __j1l (long double) __attribute__ ((__nothrow__ , __leaf__));
2877extern long double jnl (int, long double) __attribute__ ((__nothrow__ , __leaf__)); extern long double __jnl (int, long double) __attribute__ ((__nothrow__ , __leaf__));
2878extern long double y0l (long double) __attribute__ ((__nothrow__ , __leaf__)); extern long double __y0l (long double) __attribute__ ((__nothrow__ , __leaf__));
2879extern long double y1l (long double) __attribute__ ((__nothrow__ , __leaf__)); extern long double __y1l (long double) __attribute__ ((__nothrow__ , __leaf__));
2880extern long double ynl (int, long double) __attribute__ ((__nothrow__ , __leaf__)); extern long double __ynl (int, long double) __attribute__ ((__nothrow__ , __leaf__));
2881extern long double erfl (long double) __attribute__ ((__nothrow__ , __leaf__)); extern long double __erfl (long double) __attribute__ ((__nothrow__ , __leaf__));
2882extern long double erfcl (long double) __attribute__ ((__nothrow__ , __leaf__)); extern long double __erfcl (long double) __attribute__ ((__nothrow__ , __leaf__));
2883extern long double lgammal (long double) __attribute__ ((__nothrow__ , __leaf__)); extern long double __lgammal (long double) __attribute__ ((__nothrow__ , __leaf__));
2884extern long double tgammal (long double) __attribute__ ((__nothrow__ , __leaf__)); extern long double __tgammal (long double) __attribute__ ((__nothrow__ , __leaf__));
2885extern long double gammal (long double) __attribute__ ((__nothrow__ , __leaf__)); extern long double __gammal (long double) __attribute__ ((__nothrow__ , __leaf__));
2886extern long double lgammal_r (long double, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__)); extern long double __lgammal_r (long double, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__));
2887extern long double rintl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __rintl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2888extern long double nextafterl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)); extern long double __nextafterl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
2889extern long double nexttowardl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)); extern long double __nexttowardl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
2890extern long double nextdownl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __nextdownl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2891extern long double nextupl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __nextupl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2892extern long double remainderl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)); extern long double __remainderl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
2893extern long double scalbnl (long double __x, int __n) __attribute__ ((__nothrow__ , __leaf__)); extern long double __scalbnl (long double __x, int __n) __attribute__ ((__nothrow__ , __leaf__));
2894extern int ilogbl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern int __ilogbl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2895extern long int llogbl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __llogbl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2896extern long double scalblnl (long double __x, long int __n) __attribute__ ((__nothrow__ , __leaf__)); extern long double __scalblnl (long double __x, long int __n) __attribute__ ((__nothrow__ , __leaf__));
2897extern long double nearbyintl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __nearbyintl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2898extern long double roundl (long double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern long double __roundl (long double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2899extern long double truncl (long double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern long double __truncl (long double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2900extern long double remquol (long double __x, long double __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__)); extern long double __remquol (long double __x, long double __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__));
2901extern long int lrintl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lrintl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2902__extension__
2903extern long long int llrintl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llrintl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2904extern long int lroundl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lroundl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2905__extension__
2906extern long long int llroundl (long double __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llroundl (long double __x) __attribute__ ((__nothrow__ , __leaf__));
2907extern long double fdiml (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)); extern long double __fdiml (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
2908extern long double fmaxl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern long double __fmaxl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2909extern long double fminl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern long double __fminl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2910extern long double fmal (long double __x, long double __y, long double __z) __attribute__ ((__nothrow__ , __leaf__)); extern long double __fmal (long double __x, long double __y, long double __z) __attribute__ ((__nothrow__ , __leaf__));
2911extern long double roundevenl (long double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern long double __roundevenl (long double __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2912extern __intmax_t fromfpl (long double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpl (long double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
2913extern __uintmax_t ufromfpl (long double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpl (long double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
2914extern __intmax_t fromfpxl (long double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpxl (long double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
2915extern __uintmax_t ufromfpxl (long double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpxl (long double __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
2916extern long double fmaxmagl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern long double __fmaxmagl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2917extern long double fminmagl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern long double __fminmagl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2918extern int canonicalizel (long double *__cx, const long double *__x) __attribute__ ((__nothrow__ , __leaf__));
2919extern int totalorderl (const long double *__x, const long double *__y) __attribute__ ((__nothrow__ , __leaf__))
2920 __attribute__ ((__pure__));
2921extern int totalordermagl (const long double *__x, const long double *__y) __attribute__ ((__nothrow__ , __leaf__))
2922 __attribute__ ((__pure__));
2923extern long double getpayloadl (const long double *__x) __attribute__ ((__nothrow__ , __leaf__)); extern long double __getpayloadl (const long double *__x) __attribute__ ((__nothrow__ , __leaf__));
2924extern int setpayloadl (long double *__x, long double __payload) __attribute__ ((__nothrow__ , __leaf__));
2925extern int setpayloadsigl (long double *__x, long double __payload) __attribute__ ((__nothrow__ , __leaf__));
2926extern long double scalbl (long double __x, long double __n) __attribute__ ((__nothrow__ , __leaf__)); extern long double __scalbl (long double __x, long double __n) __attribute__ ((__nothrow__ , __leaf__));
2927extern _Float32 acosf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __acosf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2928extern _Float32 asinf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __asinf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2929extern _Float32 atanf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __atanf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2930extern _Float32 atan2f32 (_Float32 __y, _Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __atan2f32 (_Float32 __y, _Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2931 extern _Float32 cosf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __cosf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2932 extern _Float32 sinf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __sinf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2933extern _Float32 tanf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __tanf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2934extern _Float32 coshf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __coshf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2935extern _Float32 sinhf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __sinhf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2936extern _Float32 tanhf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __tanhf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2937 extern void sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) __attribute__ ((__nothrow__ , __leaf__)); extern void __sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) __attribute__ ((__nothrow__ , __leaf__));
2938extern _Float32 acoshf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __acoshf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2939extern _Float32 asinhf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __asinhf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2940extern _Float32 atanhf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __atanhf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2941 extern _Float32 expf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __expf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2942extern _Float32 frexpf32 (_Float32 __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __frexpf32 (_Float32 __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__));
2943extern _Float32 ldexpf32 (_Float32 __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __ldexpf32 (_Float32 __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__));
2944 extern _Float32 logf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __logf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2945extern _Float32 log10f32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __log10f32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2946extern _Float32 modff32 (_Float32 __x, _Float32 *__iptr) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __modff32 (_Float32 __x, _Float32 *__iptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
2947extern _Float32 exp10f32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __exp10f32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2948extern _Float32 expm1f32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __expm1f32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2949extern _Float32 log1pf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __log1pf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2950extern _Float32 logbf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __logbf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2951extern _Float32 exp2f32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __exp2f32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2952extern _Float32 log2f32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __log2f32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2953 extern _Float32 powf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __powf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__));
2954extern _Float32 sqrtf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __sqrtf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2955extern _Float32 hypotf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __hypotf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__));
2956extern _Float32 cbrtf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __cbrtf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2957extern _Float32 ceilf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32 __ceilf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2958extern _Float32 fabsf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32 __fabsf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2959extern _Float32 floorf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32 __floorf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2960extern _Float32 fmodf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __fmodf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__));
2961extern _Float32 copysignf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32 __copysignf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2962extern _Float32 nanf32 (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __nanf32 (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__));
2963extern _Float32 j0f32 (_Float32) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __j0f32 (_Float32) __attribute__ ((__nothrow__ , __leaf__));
2964extern _Float32 j1f32 (_Float32) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __j1f32 (_Float32) __attribute__ ((__nothrow__ , __leaf__));
2965extern _Float32 jnf32 (int, _Float32) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __jnf32 (int, _Float32) __attribute__ ((__nothrow__ , __leaf__));
2966extern _Float32 y0f32 (_Float32) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __y0f32 (_Float32) __attribute__ ((__nothrow__ , __leaf__));
2967extern _Float32 y1f32 (_Float32) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __y1f32 (_Float32) __attribute__ ((__nothrow__ , __leaf__));
2968extern _Float32 ynf32 (int, _Float32) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __ynf32 (int, _Float32) __attribute__ ((__nothrow__ , __leaf__));
2969extern _Float32 erff32 (_Float32) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __erff32 (_Float32) __attribute__ ((__nothrow__ , __leaf__));
2970extern _Float32 erfcf32 (_Float32) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __erfcf32 (_Float32) __attribute__ ((__nothrow__ , __leaf__));
2971extern _Float32 lgammaf32 (_Float32) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __lgammaf32 (_Float32) __attribute__ ((__nothrow__ , __leaf__));
2972extern _Float32 tgammaf32 (_Float32) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __tgammaf32 (_Float32) __attribute__ ((__nothrow__ , __leaf__));
2973extern _Float32 lgammaf32_r (_Float32, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __lgammaf32_r (_Float32, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__));
2974extern _Float32 rintf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __rintf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2975extern _Float32 nextafterf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __nextafterf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__));
2976extern _Float32 nextdownf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __nextdownf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2977extern _Float32 nextupf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __nextupf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2978extern _Float32 remainderf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __remainderf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__));
2979extern _Float32 scalbnf32 (_Float32 __x, int __n) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __scalbnf32 (_Float32 __x, int __n) __attribute__ ((__nothrow__ , __leaf__));
2980extern int ilogbf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern int __ilogbf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2981extern long int llogbf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __llogbf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2982extern _Float32 scalblnf32 (_Float32 __x, long int __n) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __scalblnf32 (_Float32 __x, long int __n) __attribute__ ((__nothrow__ , __leaf__));
2983extern _Float32 nearbyintf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __nearbyintf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2984extern _Float32 roundf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32 __roundf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2985extern _Float32 truncf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32 __truncf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2986extern _Float32 remquof32 (_Float32 __x, _Float32 __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __remquof32 (_Float32 __x, _Float32 __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__));
2987extern long int lrintf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lrintf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2988__extension__
2989extern long long int llrintf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llrintf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2990extern long int lroundf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lroundf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2991__extension__
2992extern long long int llroundf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llroundf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__));
2993extern _Float32 fdimf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __fdimf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__));
2994extern _Float32 fmaxf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32 __fmaxf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2995extern _Float32 fminf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32 __fminf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2996extern _Float32 fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) __attribute__ ((__nothrow__ , __leaf__));
2997extern _Float32 roundevenf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32 __roundevenf32 (_Float32 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2998extern __intmax_t fromfpf32 (_Float32 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpf32 (_Float32 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
2999extern __uintmax_t ufromfpf32 (_Float32 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpf32 (_Float32 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3000extern __intmax_t fromfpxf32 (_Float32 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpxf32 (_Float32 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3001extern __uintmax_t ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3002extern _Float32 fmaxmagf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32 __fmaxmagf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3003extern _Float32 fminmagf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32 __fminmagf32 (_Float32 __x, _Float32 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3004extern int canonicalizef32 (_Float32 *__cx, const _Float32 *__x) __attribute__ ((__nothrow__ , __leaf__));
3005extern int totalorderf32 (const _Float32 *__x, const _Float32 *__y) __attribute__ ((__nothrow__ , __leaf__))
3006 __attribute__ ((__pure__));
3007extern int totalordermagf32 (const _Float32 *__x, const _Float32 *__y) __attribute__ ((__nothrow__ , __leaf__))
3008 __attribute__ ((__pure__));
3009extern _Float32 getpayloadf32 (const _Float32 *__x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32 __getpayloadf32 (const _Float32 *__x) __attribute__ ((__nothrow__ , __leaf__));
3010extern int setpayloadf32 (_Float32 *__x, _Float32 __payload) __attribute__ ((__nothrow__ , __leaf__));
3011extern int setpayloadsigf32 (_Float32 *__x, _Float32 __payload) __attribute__ ((__nothrow__ , __leaf__));
3012extern _Float64 acosf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __acosf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3013extern _Float64 asinf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __asinf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3014extern _Float64 atanf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __atanf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3015extern _Float64 atan2f64 (_Float64 __y, _Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __atan2f64 (_Float64 __y, _Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3016 extern _Float64 cosf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __cosf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3017 extern _Float64 sinf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __sinf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3018extern _Float64 tanf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __tanf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3019extern _Float64 coshf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __coshf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3020extern _Float64 sinhf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __sinhf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3021extern _Float64 tanhf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __tanhf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3022 extern void sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) __attribute__ ((__nothrow__ , __leaf__)); extern void __sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) __attribute__ ((__nothrow__ , __leaf__));
3023extern _Float64 acoshf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __acoshf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3024extern _Float64 asinhf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __asinhf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3025extern _Float64 atanhf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __atanhf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3026 extern _Float64 expf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __expf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3027extern _Float64 frexpf64 (_Float64 __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __frexpf64 (_Float64 __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__));
3028extern _Float64 ldexpf64 (_Float64 __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __ldexpf64 (_Float64 __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__));
3029 extern _Float64 logf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __logf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3030extern _Float64 log10f64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __log10f64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3031extern _Float64 modff64 (_Float64 __x, _Float64 *__iptr) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __modff64 (_Float64 __x, _Float64 *__iptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
3032extern _Float64 exp10f64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __exp10f64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3033extern _Float64 expm1f64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __expm1f64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3034extern _Float64 log1pf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __log1pf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3035extern _Float64 logbf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __logbf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3036extern _Float64 exp2f64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __exp2f64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3037extern _Float64 log2f64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __log2f64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3038 extern _Float64 powf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __powf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3039extern _Float64 sqrtf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __sqrtf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3040extern _Float64 hypotf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __hypotf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3041extern _Float64 cbrtf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __cbrtf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3042extern _Float64 ceilf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64 __ceilf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3043extern _Float64 fabsf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64 __fabsf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3044extern _Float64 floorf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64 __floorf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3045extern _Float64 fmodf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __fmodf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3046extern _Float64 copysignf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64 __copysignf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3047extern _Float64 nanf64 (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __nanf64 (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__));
3048extern _Float64 j0f64 (_Float64) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __j0f64 (_Float64) __attribute__ ((__nothrow__ , __leaf__));
3049extern _Float64 j1f64 (_Float64) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __j1f64 (_Float64) __attribute__ ((__nothrow__ , __leaf__));
3050extern _Float64 jnf64 (int, _Float64) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __jnf64 (int, _Float64) __attribute__ ((__nothrow__ , __leaf__));
3051extern _Float64 y0f64 (_Float64) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __y0f64 (_Float64) __attribute__ ((__nothrow__ , __leaf__));
3052extern _Float64 y1f64 (_Float64) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __y1f64 (_Float64) __attribute__ ((__nothrow__ , __leaf__));
3053extern _Float64 ynf64 (int, _Float64) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __ynf64 (int, _Float64) __attribute__ ((__nothrow__ , __leaf__));
3054extern _Float64 erff64 (_Float64) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __erff64 (_Float64) __attribute__ ((__nothrow__ , __leaf__));
3055extern _Float64 erfcf64 (_Float64) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __erfcf64 (_Float64) __attribute__ ((__nothrow__ , __leaf__));
3056extern _Float64 lgammaf64 (_Float64) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __lgammaf64 (_Float64) __attribute__ ((__nothrow__ , __leaf__));
3057extern _Float64 tgammaf64 (_Float64) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __tgammaf64 (_Float64) __attribute__ ((__nothrow__ , __leaf__));
3058extern _Float64 lgammaf64_r (_Float64, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __lgammaf64_r (_Float64, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__));
3059extern _Float64 rintf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __rintf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3060extern _Float64 nextafterf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __nextafterf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3061extern _Float64 nextdownf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __nextdownf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3062extern _Float64 nextupf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __nextupf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3063extern _Float64 remainderf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __remainderf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3064extern _Float64 scalbnf64 (_Float64 __x, int __n) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __scalbnf64 (_Float64 __x, int __n) __attribute__ ((__nothrow__ , __leaf__));
3065extern int ilogbf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern int __ilogbf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3066extern long int llogbf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __llogbf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3067extern _Float64 scalblnf64 (_Float64 __x, long int __n) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __scalblnf64 (_Float64 __x, long int __n) __attribute__ ((__nothrow__ , __leaf__));
3068extern _Float64 nearbyintf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __nearbyintf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3069extern _Float64 roundf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64 __roundf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3070extern _Float64 truncf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64 __truncf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3071extern _Float64 remquof64 (_Float64 __x, _Float64 __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __remquof64 (_Float64 __x, _Float64 __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__));
3072extern long int lrintf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lrintf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3073__extension__
3074extern long long int llrintf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llrintf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3075extern long int lroundf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lroundf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3076__extension__
3077extern long long int llroundf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llroundf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__));
3078extern _Float64 fdimf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __fdimf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3079extern _Float64 fmaxf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64 __fmaxf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3080extern _Float64 fminf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64 __fminf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3081extern _Float64 fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) __attribute__ ((__nothrow__ , __leaf__));
3082extern _Float64 roundevenf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64 __roundevenf64 (_Float64 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3083extern __intmax_t fromfpf64 (_Float64 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpf64 (_Float64 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3084extern __uintmax_t ufromfpf64 (_Float64 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpf64 (_Float64 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3085extern __intmax_t fromfpxf64 (_Float64 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpxf64 (_Float64 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3086extern __uintmax_t ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3087extern _Float64 fmaxmagf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64 __fmaxmagf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3088extern _Float64 fminmagf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64 __fminmagf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3089extern int canonicalizef64 (_Float64 *__cx, const _Float64 *__x) __attribute__ ((__nothrow__ , __leaf__));
3090extern int totalorderf64 (const _Float64 *__x, const _Float64 *__y) __attribute__ ((__nothrow__ , __leaf__))
3091 __attribute__ ((__pure__));
3092extern int totalordermagf64 (const _Float64 *__x, const _Float64 *__y) __attribute__ ((__nothrow__ , __leaf__))
3093 __attribute__ ((__pure__));
3094extern _Float64 getpayloadf64 (const _Float64 *__x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64 __getpayloadf64 (const _Float64 *__x) __attribute__ ((__nothrow__ , __leaf__));
3095extern int setpayloadf64 (_Float64 *__x, _Float64 __payload) __attribute__ ((__nothrow__ , __leaf__));
3096extern int setpayloadsigf64 (_Float64 *__x, _Float64 __payload) __attribute__ ((__nothrow__ , __leaf__));
3097extern int __fpclassifyf128 (_Float128 __value) __attribute__ ((__nothrow__ , __leaf__))
3098 __attribute__ ((__const__));
3099extern int __signbitf128 (_Float128 __value) __attribute__ ((__nothrow__ , __leaf__))
3100 __attribute__ ((__const__));
3101extern int __isinff128 (_Float128 __value) __attribute__ ((__nothrow__ , __leaf__))
3102 __attribute__ ((__const__));
3103extern int __finitef128 (_Float128 __value) __attribute__ ((__nothrow__ , __leaf__))
3104 __attribute__ ((__const__));
3105extern int __isnanf128 (_Float128 __value) __attribute__ ((__nothrow__ , __leaf__))
3106 __attribute__ ((__const__));
3107extern int __iseqsigf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3108extern int __issignalingf128 (_Float128 __value) __attribute__ ((__nothrow__ , __leaf__))
3109 __attribute__ ((__const__));
3110extern _Float128 acosf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __acosf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3111extern _Float128 asinf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __asinf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3112extern _Float128 atanf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __atanf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3113extern _Float128 atan2f128 (_Float128 __y, _Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __atan2f128 (_Float128 __y, _Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3114 extern _Float128 cosf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __cosf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3115 extern _Float128 sinf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __sinf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3116extern _Float128 tanf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __tanf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3117extern _Float128 coshf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __coshf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3118extern _Float128 sinhf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __sinhf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3119extern _Float128 tanhf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __tanhf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3120 extern void sincosf128 (_Float128 __x, _Float128 *__sinx, _Float128 *__cosx) __attribute__ ((__nothrow__ , __leaf__)); extern void __sincosf128 (_Float128 __x, _Float128 *__sinx, _Float128 *__cosx) __attribute__ ((__nothrow__ , __leaf__));
3121extern _Float128 acoshf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __acoshf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3122extern _Float128 asinhf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __asinhf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3123extern _Float128 atanhf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __atanhf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3124 extern _Float128 expf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __expf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3125extern _Float128 frexpf128 (_Float128 __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __frexpf128 (_Float128 __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__));
3126extern _Float128 ldexpf128 (_Float128 __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __ldexpf128 (_Float128 __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__));
3127 extern _Float128 logf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __logf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3128extern _Float128 log10f128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __log10f128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3129extern _Float128 modff128 (_Float128 __x, _Float128 *__iptr) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __modff128 (_Float128 __x, _Float128 *__iptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
3130extern _Float128 exp10f128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __exp10f128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3131extern _Float128 expm1f128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __expm1f128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3132extern _Float128 log1pf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __log1pf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3133extern _Float128 logbf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __logbf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3134extern _Float128 exp2f128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __exp2f128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3135extern _Float128 log2f128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __log2f128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3136 extern _Float128 powf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __powf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3137extern _Float128 sqrtf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __sqrtf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3138extern _Float128 hypotf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __hypotf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3139extern _Float128 cbrtf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __cbrtf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3140extern _Float128 ceilf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float128 __ceilf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3141extern _Float128 fabsf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float128 __fabsf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3142extern _Float128 floorf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float128 __floorf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3143extern _Float128 fmodf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __fmodf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3144extern _Float128 copysignf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float128 __copysignf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3145extern _Float128 nanf128 (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __nanf128 (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__));
3146extern _Float128 j0f128 (_Float128) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __j0f128 (_Float128) __attribute__ ((__nothrow__ , __leaf__));
3147extern _Float128 j1f128 (_Float128) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __j1f128 (_Float128) __attribute__ ((__nothrow__ , __leaf__));
3148extern _Float128 jnf128 (int, _Float128) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __jnf128 (int, _Float128) __attribute__ ((__nothrow__ , __leaf__));
3149extern _Float128 y0f128 (_Float128) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __y0f128 (_Float128) __attribute__ ((__nothrow__ , __leaf__));
3150extern _Float128 y1f128 (_Float128) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __y1f128 (_Float128) __attribute__ ((__nothrow__ , __leaf__));
3151extern _Float128 ynf128 (int, _Float128) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __ynf128 (int, _Float128) __attribute__ ((__nothrow__ , __leaf__));
3152extern _Float128 erff128 (_Float128) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __erff128 (_Float128) __attribute__ ((__nothrow__ , __leaf__));
3153extern _Float128 erfcf128 (_Float128) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __erfcf128 (_Float128) __attribute__ ((__nothrow__ , __leaf__));
3154extern _Float128 lgammaf128 (_Float128) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __lgammaf128 (_Float128) __attribute__ ((__nothrow__ , __leaf__));
3155extern _Float128 tgammaf128 (_Float128) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __tgammaf128 (_Float128) __attribute__ ((__nothrow__ , __leaf__));
3156extern _Float128 lgammaf128_r (_Float128, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __lgammaf128_r (_Float128, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__));
3157extern _Float128 rintf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __rintf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3158extern _Float128 nextafterf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __nextafterf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3159extern _Float128 nextdownf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __nextdownf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3160extern _Float128 nextupf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __nextupf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3161extern _Float128 remainderf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __remainderf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3162extern _Float128 scalbnf128 (_Float128 __x, int __n) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __scalbnf128 (_Float128 __x, int __n) __attribute__ ((__nothrow__ , __leaf__));
3163extern int ilogbf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern int __ilogbf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3164extern long int llogbf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __llogbf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3165extern _Float128 scalblnf128 (_Float128 __x, long int __n) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __scalblnf128 (_Float128 __x, long int __n) __attribute__ ((__nothrow__ , __leaf__));
3166extern _Float128 nearbyintf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __nearbyintf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3167extern _Float128 roundf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float128 __roundf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3168extern _Float128 truncf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float128 __truncf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3169extern _Float128 remquof128 (_Float128 __x, _Float128 __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __remquof128 (_Float128 __x, _Float128 __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__));
3170extern long int lrintf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lrintf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3171__extension__
3172extern long long int llrintf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llrintf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3173extern long int lroundf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lroundf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3174__extension__
3175extern long long int llroundf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llroundf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__));
3176extern _Float128 fdimf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __fdimf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3177extern _Float128 fmaxf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float128 __fmaxf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3178extern _Float128 fminf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float128 __fminf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3179extern _Float128 fmaf128 (_Float128 __x, _Float128 __y, _Float128 __z) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __fmaf128 (_Float128 __x, _Float128 __y, _Float128 __z) __attribute__ ((__nothrow__ , __leaf__));
3180extern _Float128 roundevenf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float128 __roundevenf128 (_Float128 __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3181extern __intmax_t fromfpf128 (_Float128 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpf128 (_Float128 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3182extern __uintmax_t ufromfpf128 (_Float128 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpf128 (_Float128 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3183extern __intmax_t fromfpxf128 (_Float128 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpxf128 (_Float128 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3184extern __uintmax_t ufromfpxf128 (_Float128 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpxf128 (_Float128 __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3185extern _Float128 fmaxmagf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float128 __fmaxmagf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3186extern _Float128 fminmagf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float128 __fminmagf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3187extern int canonicalizef128 (_Float128 *__cx, const _Float128 *__x) __attribute__ ((__nothrow__ , __leaf__));
3188extern int totalorderf128 (const _Float128 *__x, const _Float128 *__y) __attribute__ ((__nothrow__ , __leaf__))
3189 __attribute__ ((__pure__));
3190extern int totalordermagf128 (const _Float128 *__x, const _Float128 *__y) __attribute__ ((__nothrow__ , __leaf__))
3191 __attribute__ ((__pure__));
3192extern _Float128 getpayloadf128 (const _Float128 *__x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float128 __getpayloadf128 (const _Float128 *__x) __attribute__ ((__nothrow__ , __leaf__));
3193extern int setpayloadf128 (_Float128 *__x, _Float128 __payload) __attribute__ ((__nothrow__ , __leaf__));
3194extern int setpayloadsigf128 (_Float128 *__x, _Float128 __payload) __attribute__ ((__nothrow__ , __leaf__));
3195extern _Float32x acosf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __acosf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3196extern _Float32x asinf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __asinf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3197extern _Float32x atanf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __atanf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3198extern _Float32x atan2f32x (_Float32x __y, _Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __atan2f32x (_Float32x __y, _Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3199 extern _Float32x cosf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __cosf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3200 extern _Float32x sinf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __sinf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3201extern _Float32x tanf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __tanf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3202extern _Float32x coshf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __coshf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3203extern _Float32x sinhf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __sinhf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3204extern _Float32x tanhf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __tanhf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3205 extern void sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) __attribute__ ((__nothrow__ , __leaf__)); extern void __sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) __attribute__ ((__nothrow__ , __leaf__));
3206extern _Float32x acoshf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __acoshf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3207extern _Float32x asinhf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __asinhf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3208extern _Float32x atanhf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __atanhf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3209 extern _Float32x expf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __expf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3210extern _Float32x frexpf32x (_Float32x __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __frexpf32x (_Float32x __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__));
3211extern _Float32x ldexpf32x (_Float32x __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __ldexpf32x (_Float32x __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__));
3212 extern _Float32x logf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __logf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3213extern _Float32x log10f32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __log10f32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3214extern _Float32x modff32x (_Float32x __x, _Float32x *__iptr) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __modff32x (_Float32x __x, _Float32x *__iptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
3215extern _Float32x exp10f32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __exp10f32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3216extern _Float32x expm1f32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __expm1f32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3217extern _Float32x log1pf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __log1pf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3218extern _Float32x logbf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __logbf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3219extern _Float32x exp2f32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __exp2f32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3220extern _Float32x log2f32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __log2f32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3221 extern _Float32x powf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __powf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__));
3222extern _Float32x sqrtf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __sqrtf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3223extern _Float32x hypotf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __hypotf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__));
3224extern _Float32x cbrtf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __cbrtf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3225extern _Float32x ceilf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32x __ceilf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3226extern _Float32x fabsf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32x __fabsf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3227extern _Float32x floorf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32x __floorf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3228extern _Float32x fmodf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __fmodf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__));
3229extern _Float32x copysignf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32x __copysignf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3230extern _Float32x nanf32x (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __nanf32x (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__));
3231extern _Float32x j0f32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __j0f32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__));
3232extern _Float32x j1f32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __j1f32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__));
3233extern _Float32x jnf32x (int, _Float32x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __jnf32x (int, _Float32x) __attribute__ ((__nothrow__ , __leaf__));
3234extern _Float32x y0f32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __y0f32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__));
3235extern _Float32x y1f32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __y1f32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__));
3236extern _Float32x ynf32x (int, _Float32x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __ynf32x (int, _Float32x) __attribute__ ((__nothrow__ , __leaf__));
3237extern _Float32x erff32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __erff32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__));
3238extern _Float32x erfcf32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __erfcf32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__));
3239extern _Float32x lgammaf32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __lgammaf32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__));
3240extern _Float32x tgammaf32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __tgammaf32x (_Float32x) __attribute__ ((__nothrow__ , __leaf__));
3241extern _Float32x lgammaf32x_r (_Float32x, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __lgammaf32x_r (_Float32x, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__));
3242extern _Float32x rintf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __rintf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3243extern _Float32x nextafterf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __nextafterf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__));
3244extern _Float32x nextdownf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __nextdownf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3245extern _Float32x nextupf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __nextupf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3246extern _Float32x remainderf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __remainderf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__));
3247extern _Float32x scalbnf32x (_Float32x __x, int __n) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __scalbnf32x (_Float32x __x, int __n) __attribute__ ((__nothrow__ , __leaf__));
3248extern int ilogbf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern int __ilogbf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3249extern long int llogbf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __llogbf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3250extern _Float32x scalblnf32x (_Float32x __x, long int __n) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __scalblnf32x (_Float32x __x, long int __n) __attribute__ ((__nothrow__ , __leaf__));
3251extern _Float32x nearbyintf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __nearbyintf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3252extern _Float32x roundf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32x __roundf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3253extern _Float32x truncf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32x __truncf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3254extern _Float32x remquof32x (_Float32x __x, _Float32x __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __remquof32x (_Float32x __x, _Float32x __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__));
3255extern long int lrintf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lrintf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3256__extension__
3257extern long long int llrintf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llrintf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3258extern long int lroundf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lroundf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3259__extension__
3260extern long long int llroundf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llroundf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__));
3261extern _Float32x fdimf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __fdimf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__));
3262extern _Float32x fmaxf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32x __fmaxf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3263extern _Float32x fminf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32x __fminf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3264extern _Float32x fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) __attribute__ ((__nothrow__ , __leaf__));
3265extern _Float32x roundevenf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32x __roundevenf32x (_Float32x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3266extern __intmax_t fromfpf32x (_Float32x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpf32x (_Float32x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3267extern __uintmax_t ufromfpf32x (_Float32x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpf32x (_Float32x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3268extern __intmax_t fromfpxf32x (_Float32x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpxf32x (_Float32x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3269extern __uintmax_t ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3270extern _Float32x fmaxmagf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32x __fmaxmagf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3271extern _Float32x fminmagf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float32x __fminmagf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3272extern int canonicalizef32x (_Float32x *__cx, const _Float32x *__x) __attribute__ ((__nothrow__ , __leaf__));
3273extern int totalorderf32x (const _Float32x *__x, const _Float32x *__y) __attribute__ ((__nothrow__ , __leaf__))
3274 __attribute__ ((__pure__));
3275extern int totalordermagf32x (const _Float32x *__x, const _Float32x *__y) __attribute__ ((__nothrow__ , __leaf__))
3276 __attribute__ ((__pure__));
3277extern _Float32x getpayloadf32x (const _Float32x *__x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float32x __getpayloadf32x (const _Float32x *__x) __attribute__ ((__nothrow__ , __leaf__));
3278extern int setpayloadf32x (_Float32x *__x, _Float32x __payload) __attribute__ ((__nothrow__ , __leaf__));
3279extern int setpayloadsigf32x (_Float32x *__x, _Float32x __payload) __attribute__ ((__nothrow__ , __leaf__));
3280extern _Float64x acosf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __acosf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3281extern _Float64x asinf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __asinf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3282extern _Float64x atanf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __atanf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3283extern _Float64x atan2f64x (_Float64x __y, _Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __atan2f64x (_Float64x __y, _Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3284 extern _Float64x cosf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __cosf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3285 extern _Float64x sinf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __sinf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3286extern _Float64x tanf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __tanf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3287extern _Float64x coshf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __coshf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3288extern _Float64x sinhf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __sinhf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3289extern _Float64x tanhf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __tanhf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3290 extern void sincosf64x (_Float64x __x, _Float64x *__sinx, _Float64x *__cosx) __attribute__ ((__nothrow__ , __leaf__)); extern void __sincosf64x (_Float64x __x, _Float64x *__sinx, _Float64x *__cosx) __attribute__ ((__nothrow__ , __leaf__));
3291extern _Float64x acoshf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __acoshf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3292extern _Float64x asinhf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __asinhf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3293extern _Float64x atanhf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __atanhf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3294 extern _Float64x expf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __expf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3295extern _Float64x frexpf64x (_Float64x __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __frexpf64x (_Float64x __x, int *__exponent) __attribute__ ((__nothrow__ , __leaf__));
3296extern _Float64x ldexpf64x (_Float64x __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __ldexpf64x (_Float64x __x, int __exponent) __attribute__ ((__nothrow__ , __leaf__));
3297 extern _Float64x logf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __logf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3298extern _Float64x log10f64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __log10f64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3299extern _Float64x modff64x (_Float64x __x, _Float64x *__iptr) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __modff64x (_Float64x __x, _Float64x *__iptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
3300extern _Float64x exp10f64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __exp10f64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3301extern _Float64x expm1f64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __expm1f64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3302extern _Float64x log1pf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __log1pf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3303extern _Float64x logbf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __logbf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3304extern _Float64x exp2f64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __exp2f64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3305extern _Float64x log2f64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __log2f64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3306 extern _Float64x powf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __powf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3307extern _Float64x sqrtf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __sqrtf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3308extern _Float64x hypotf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __hypotf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3309extern _Float64x cbrtf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __cbrtf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3310extern _Float64x ceilf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64x __ceilf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3311extern _Float64x fabsf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64x __fabsf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3312extern _Float64x floorf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64x __floorf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3313extern _Float64x fmodf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __fmodf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3314extern _Float64x copysignf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64x __copysignf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3315extern _Float64x nanf64x (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __nanf64x (const char *__tagb) __attribute__ ((__nothrow__ , __leaf__));
3316extern _Float64x j0f64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __j0f64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__));
3317extern _Float64x j1f64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __j1f64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__));
3318extern _Float64x jnf64x (int, _Float64x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __jnf64x (int, _Float64x) __attribute__ ((__nothrow__ , __leaf__));
3319extern _Float64x y0f64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __y0f64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__));
3320extern _Float64x y1f64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __y1f64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__));
3321extern _Float64x ynf64x (int, _Float64x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __ynf64x (int, _Float64x) __attribute__ ((__nothrow__ , __leaf__));
3322extern _Float64x erff64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __erff64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__));
3323extern _Float64x erfcf64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __erfcf64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__));
3324extern _Float64x lgammaf64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __lgammaf64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__));
3325extern _Float64x tgammaf64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __tgammaf64x (_Float64x) __attribute__ ((__nothrow__ , __leaf__));
3326extern _Float64x lgammaf64x_r (_Float64x, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __lgammaf64x_r (_Float64x, int *__signgamp) __attribute__ ((__nothrow__ , __leaf__));
3327extern _Float64x rintf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __rintf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3328extern _Float64x nextafterf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __nextafterf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3329extern _Float64x nextdownf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __nextdownf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3330extern _Float64x nextupf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __nextupf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3331extern _Float64x remainderf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __remainderf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3332extern _Float64x scalbnf64x (_Float64x __x, int __n) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __scalbnf64x (_Float64x __x, int __n) __attribute__ ((__nothrow__ , __leaf__));
3333extern int ilogbf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern int __ilogbf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3334extern long int llogbf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __llogbf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3335extern _Float64x scalblnf64x (_Float64x __x, long int __n) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __scalblnf64x (_Float64x __x, long int __n) __attribute__ ((__nothrow__ , __leaf__));
3336extern _Float64x nearbyintf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __nearbyintf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3337extern _Float64x roundf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64x __roundf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3338extern _Float64x truncf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64x __truncf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3339extern _Float64x remquof64x (_Float64x __x, _Float64x __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __remquof64x (_Float64x __x, _Float64x __y, int *__quo) __attribute__ ((__nothrow__ , __leaf__));
3340extern long int lrintf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lrintf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3341__extension__
3342extern long long int llrintf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llrintf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3343extern long int lroundf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern long int __lroundf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3344__extension__
3345extern long long int llroundf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)); extern long long int __llroundf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__));
3346extern _Float64x fdimf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __fdimf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3347extern _Float64x fmaxf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64x __fmaxf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3348extern _Float64x fminf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64x __fminf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3349extern _Float64x fmaf64x (_Float64x __x, _Float64x __y, _Float64x __z) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __fmaf64x (_Float64x __x, _Float64x __y, _Float64x __z) __attribute__ ((__nothrow__ , __leaf__));
3350extern _Float64x roundevenf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64x __roundevenf64x (_Float64x __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3351extern __intmax_t fromfpf64x (_Float64x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpf64x (_Float64x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3352extern __uintmax_t ufromfpf64x (_Float64x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpf64x (_Float64x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3353extern __intmax_t fromfpxf64x (_Float64x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __intmax_t __fromfpxf64x (_Float64x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3354extern __uintmax_t ufromfpxf64x (_Float64x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__)); extern __uintmax_t __ufromfpxf64x (_Float64x __x, int __round, unsigned int __width) __attribute__ ((__nothrow__ , __leaf__));
3355extern _Float64x fmaxmagf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64x __fmaxmagf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3356extern _Float64x fminmagf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern _Float64x __fminmagf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3357extern int canonicalizef64x (_Float64x *__cx, const _Float64x *__x) __attribute__ ((__nothrow__ , __leaf__));
3358extern int totalorderf64x (const _Float64x *__x, const _Float64x *__y) __attribute__ ((__nothrow__ , __leaf__))
3359 __attribute__ ((__pure__));
3360extern int totalordermagf64x (const _Float64x *__x, const _Float64x *__y) __attribute__ ((__nothrow__ , __leaf__))
3361 __attribute__ ((__pure__));
3362extern _Float64x getpayloadf64x (const _Float64x *__x) __attribute__ ((__nothrow__ , __leaf__)); extern _Float64x __getpayloadf64x (const _Float64x *__x) __attribute__ ((__nothrow__ , __leaf__));
3363extern int setpayloadf64x (_Float64x *__x, _Float64x __payload) __attribute__ ((__nothrow__ , __leaf__));
3364extern int setpayloadsigf64x (_Float64x *__x, _Float64x __payload) __attribute__ ((__nothrow__ , __leaf__));
3365extern float fadd (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__));
3366extern float fdiv (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__));
3367extern float fmul (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__));
3368extern float fsub (double __x, double __y) __attribute__ ((__nothrow__ , __leaf__));
3369extern float faddl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
3370extern float fdivl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
3371extern float fmull (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
3372extern float fsubl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
3373extern double daddl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
3374extern double ddivl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
3375extern double dmull (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
3376extern double dsubl (long double __x, long double __y) __attribute__ ((__nothrow__ , __leaf__));
3377extern _Float32 f32addf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__));
3378extern _Float32 f32divf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__));
3379extern _Float32 f32mulf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__));
3380extern _Float32 f32subf32x (_Float32x __x, _Float32x __y) __attribute__ ((__nothrow__ , __leaf__));
3381extern _Float32 f32addf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3382extern _Float32 f32divf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3383extern _Float32 f32mulf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3384extern _Float32 f32subf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3385extern _Float32 f32addf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3386extern _Float32 f32divf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3387extern _Float32 f32mulf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3388extern _Float32 f32subf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3389extern _Float32 f32addf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3390extern _Float32 f32divf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3391extern _Float32 f32mulf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3392extern _Float32 f32subf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3393extern _Float32x f32xaddf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3394extern _Float32x f32xdivf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3395extern _Float32x f32xmulf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3396extern _Float32x f32xsubf64 (_Float64 __x, _Float64 __y) __attribute__ ((__nothrow__ , __leaf__));
3397extern _Float32x f32xaddf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3398extern _Float32x f32xdivf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3399extern _Float32x f32xmulf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3400extern _Float32x f32xsubf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3401extern _Float32x f32xaddf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3402extern _Float32x f32xdivf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3403extern _Float32x f32xmulf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3404extern _Float32x f32xsubf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3405extern _Float64 f64addf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3406extern _Float64 f64divf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3407extern _Float64 f64mulf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3408extern _Float64 f64subf64x (_Float64x __x, _Float64x __y) __attribute__ ((__nothrow__ , __leaf__));
3409extern _Float64 f64addf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3410extern _Float64 f64divf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3411extern _Float64 f64mulf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3412extern _Float64 f64subf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3413extern _Float64x f64xaddf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3414extern _Float64x f64xdivf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3415extern _Float64x f64xmulf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3416extern _Float64x f64xsubf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));
3417extern int signgam;
3418enum
3419 {
3420 FP_NAN =
3421 0,
3422 FP_INFINITE =
3423 1,
3424 FP_ZERO =
3425 2,
3426 FP_SUBNORMAL =
3427 3,
3428 FP_NORMAL =
3429 4
3430 };
3431extern int __iscanonicall (long double __x)
3432 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3433
3434struct timex
3435{
3436 unsigned int modes;
3437 __syscall_slong_t offset;
3438 __syscall_slong_t freq;
3439 __syscall_slong_t maxerror;
3440 __syscall_slong_t esterror;
3441 int status;
3442 __syscall_slong_t constant;
3443 __syscall_slong_t precision;
3444 __syscall_slong_t tolerance;
3445 struct timeval time;
3446 __syscall_slong_t tick;
3447 __syscall_slong_t ppsfreq;
3448 __syscall_slong_t jitter;
3449 int shift;
3450 __syscall_slong_t stabil;
3451 __syscall_slong_t jitcnt;
3452 __syscall_slong_t calcnt;
3453 __syscall_slong_t errcnt;
3454 __syscall_slong_t stbcnt;
3455 int tai;
3456 int :32; int :32; int :32; int :32;
3457 int :32; int :32; int :32; int :32;
3458 int :32; int :32; int :32;
3459};
3460
3461extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __attribute__ ((__nothrow__ , __leaf__));
3462
3463struct tm
3464{
3465 int tm_sec;
3466 int tm_min;
3467 int tm_hour;
3468 int tm_mday;
3469 int tm_mon;
3470 int tm_year;
3471 int tm_wday;
3472 int tm_yday;
3473 int tm_isdst;
3474 long int tm_gmtoff;
3475 const char *tm_zone;
3476};
3477struct itimerspec
3478 {
3479 struct timespec it_interval;
3480 struct timespec it_value;
3481 };
3482struct sigevent;
3483
3484extern clock_t clock (void) __attribute__ ((__nothrow__ , __leaf__));
3485extern time_t time (time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));
3486extern double difftime (time_t __time1, time_t __time0)
3487 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3488extern time_t mktime (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));
3489extern size_t strftime (char *__restrict __s, size_t __maxsize,
3490 const char *__restrict __format,
3491 const struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__));
3492extern char *strptime (const char *__restrict __s,
3493 const char *__restrict __fmt, struct tm *__tp)
3494 __attribute__ ((__nothrow__ , __leaf__));
3495extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
3496 const char *__restrict __format,
3497 const struct tm *__restrict __tp,
3498 locale_t __loc) __attribute__ ((__nothrow__ , __leaf__));
3499extern char *strptime_l (const char *__restrict __s,
3500 const char *__restrict __fmt, struct tm *__tp,
3501 locale_t __loc) __attribute__ ((__nothrow__ , __leaf__));
3502extern struct tm *gmtime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));
3503extern struct tm *localtime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));
3504extern struct tm *gmtime_r (const time_t *__restrict __timer,
3505 struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__));
3506extern struct tm *localtime_r (const time_t *__restrict __timer,
3507 struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__));
3508extern char *asctime (const struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));
3509extern char *ctime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));
3510extern char *asctime_r (const struct tm *__restrict __tp,
3511 char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));
3512extern char *ctime_r (const time_t *__restrict __timer,
3513 char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));
3514extern char *__tzname[2];
3515extern int __daylight;
3516extern long int __timezone;
3517extern char *tzname[2];
3518extern void tzset (void) __attribute__ ((__nothrow__ , __leaf__));
3519extern int daylight;
3520extern long int timezone;
3521extern time_t timegm (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));
3522extern time_t timelocal (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));
3523extern int dysize (int __year) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3524extern int nanosleep (const struct timespec *__requested_time,
3525 struct timespec *__remaining);
3526extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __attribute__ ((__nothrow__ , __leaf__));
3527extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __attribute__ ((__nothrow__ , __leaf__));
3528extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
3529 __attribute__ ((__nothrow__ , __leaf__));
3530extern int clock_nanosleep (clockid_t __clock_id, int __flags,
3531 const struct timespec *__req,
3532 struct timespec *__rem);
3533extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) __attribute__ ((__nothrow__ , __leaf__));
3534extern int timer_create (clockid_t __clock_id,
3535 struct sigevent *__restrict __evp,
3536 timer_t *__restrict __timerid) __attribute__ ((__nothrow__ , __leaf__));
3537extern int timer_delete (timer_t __timerid) __attribute__ ((__nothrow__ , __leaf__));
3538extern int timer_settime (timer_t __timerid, int __flags,
3539 const struct itimerspec *__restrict __value,
3540 struct itimerspec *__restrict __ovalue) __attribute__ ((__nothrow__ , __leaf__));
3541extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
3542 __attribute__ ((__nothrow__ , __leaf__));
3543extern int timer_getoverrun (timer_t __timerid) __attribute__ ((__nothrow__ , __leaf__));
3544extern int timespec_get (struct timespec *__ts, int __base)
3545 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
3546extern int getdate_err;
3547extern struct tm *getdate (const char *__string);
3548extern int getdate_r (const char *__restrict __string,
3549 struct tm *__restrict __resbufp);
3550
3551
3552struct timezone
3553 {
3554 int tz_minuteswest;
3555 int tz_dsttime;
3556 };
3557extern int gettimeofday (struct timeval *__restrict __tv,
3558 void *__restrict __tz) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
3559extern int settimeofday (const struct timeval *__tv,
3560 const struct timezone *__tz)
3561 __attribute__ ((__nothrow__ , __leaf__));
3562extern int adjtime (const struct timeval *__delta,
3563 struct timeval *__olddelta) __attribute__ ((__nothrow__ , __leaf__));
3564enum __itimer_which
3565 {
3566 ITIMER_REAL = 0,
3567 ITIMER_VIRTUAL = 1,
3568 ITIMER_PROF = 2
3569 };
3570struct itimerval
3571 {
3572 struct timeval it_interval;
3573 struct timeval it_value;
3574 };
3575typedef enum __itimer_which __itimer_which_t;
3576extern int getitimer (__itimer_which_t __which,
3577 struct itimerval *__value) __attribute__ ((__nothrow__ , __leaf__));
3578extern int setitimer (__itimer_which_t __which,
3579 const struct itimerval *__restrict __new,
3580 struct itimerval *__restrict __old) __attribute__ ((__nothrow__ , __leaf__));
3581extern int utimes (const char *__file, const struct timeval __tvp[2])
3582 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
3583extern int lutimes (const char *__file, const struct timeval __tvp[2])
3584 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
3585extern int futimes (int __fd, const struct timeval __tvp[2]) __attribute__ ((__nothrow__ , __leaf__));
3586extern int futimesat (int __fd, const char *__file,
3587 const struct timeval __tvp[2]) __attribute__ ((__nothrow__ , __leaf__));
3588
3589
3590
3591extern size_t strlcpy(char *, const char*, size_t);
3592extern size_t strlcat(char *, const char*, size_t);
3593__attribute__((__format__(__printf__, 1, 2)))
3594extern void setproctitle(const char *fmt, ...);
3595
3596
3597typedef unsigned long VALUE;
3598typedef unsigned long ID;
3599__extension__ _Static_assert(4 == sizeof(int), "sizeof_int" ": " "SIZEOF_INT == sizeof(int)");
3600__extension__ _Static_assert(8 == sizeof(long), "sizeof_long" ": " "SIZEOF_LONG == sizeof(long)");
3601__extension__ _Static_assert(8 == sizeof(long long), "sizeof_long_long" ": " "SIZEOF_LONG_LONG == sizeof(LONG_LONG)");
3602__extension__ _Static_assert(8 == sizeof(void *), "sizeof_voidp" ": " "SIZEOF_VOIDP == sizeof(void *)");
3603
3604
3605VALUE rb_class_new(VALUE super);
3606VALUE rb_mod_init_copy(VALUE clone, VALUE orig);
3607void rb_check_inheritable(VALUE super);
3608VALUE rb_define_class_id(ID id, VALUE super);
3609VALUE rb_define_class_id_under(VALUE outer, ID id, VALUE super);
3610VALUE rb_module_new(void);
3611VALUE rb_refinement_new(void);
3612VALUE rb_define_module_id(ID id);
3613VALUE rb_define_module_id_under(VALUE outer, ID id);
3614VALUE rb_mod_included_modules(VALUE mod);
3615VALUE rb_mod_include_p(VALUE child, VALUE parent);
3616VALUE rb_mod_ancestors(VALUE mod);
3617VALUE rb_class_descendants(VALUE klass);
3618VALUE rb_class_subclasses(VALUE klass);
3619VALUE rb_class_instance_methods(int argc, const VALUE *argv, VALUE mod);
3620VALUE rb_class_public_instance_methods(int argc, const VALUE *argv, VALUE mod);
3621VALUE rb_class_protected_instance_methods(int argc, const VALUE *argv, VALUE mod);
3622VALUE rb_class_private_instance_methods(int argc, const VALUE *argv, VALUE mod);
3623VALUE rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj);
3624void rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(), int arity);
3625void rb_undef(VALUE mod, ID mid);
3626__attribute__((__nonnull__ ()))
3627void rb_define_protected_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
3628__attribute__((__nonnull__ ()))
3629void rb_define_private_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
3630__attribute__((__nonnull__ ()))
3631void rb_define_singleton_method(VALUE obj, const char *mid, VALUE(*func)(), int arity);
3632VALUE rb_singleton_class(VALUE obj);
3633
3634
3635
3636
3637int rb_sourceline(void);
3638const char *rb_sourcefile(void);
3639int rb_frame_method_id_and_class(ID *idp, VALUE *klassp);
3640VALUE rb_check_funcall(VALUE recv, ID mid, int argc, const VALUE *argv);
3641VALUE rb_check_funcall_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
3642VALUE rb_eval_cmd_kw(VALUE cmd, VALUE arg, int kw_splat);
3643VALUE rb_apply(VALUE recv, ID mid, VALUE args);
3644VALUE rb_obj_instance_eval(int argc, const VALUE *argv, VALUE recv);
3645VALUE rb_obj_instance_exec(int argc, const VALUE *argv, VALUE recv);
3646VALUE rb_mod_module_eval(int argc, const VALUE *argv, VALUE mod);
3647VALUE rb_mod_module_exec(int argc, const VALUE *argv, VALUE mod);
3648typedef VALUE (*rb_alloc_func_t)(VALUE klass);
3649void rb_define_alloc_func(VALUE klass, rb_alloc_func_t func);
3650void rb_undef_alloc_func(VALUE klass);
3652void rb_clear_constant_cache(void);
3653void rb_alias(VALUE klass, ID dst, ID src);
3654void rb_attr(VALUE klass, ID name, int need_reader, int need_writer, int honour_visibility);
3655__attribute__((__nonnull__ ()))
3656void rb_remove_method(VALUE klass, const char *name);
3657void rb_remove_method_id(VALUE klass, ID mid);
3658int rb_method_boundp(VALUE klass, ID id, int ex);
3659int rb_method_basic_definition_p(VALUE klass, ID mid);
3660int rb_obj_respond_to(VALUE obj, ID mid, int private_p);
3661int rb_respond_to(VALUE obj, ID mid);
3662__attribute__((__noreturn__))
3663VALUE rb_f_notimplement(int argc, const VALUE *argv, VALUE obj, VALUE marker);
3664void rb_backtrace(void);
3665VALUE rb_make_backtrace(void);
3666
3667
3668
3669
3670__attribute__((__nonnull__ ()))
3671void rb_define_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
3672__attribute__((__nonnull__ ()))
3673void rb_define_module_function(VALUE klass, const char *mid, VALUE (*func)(), int arity);
3674__attribute__((__nonnull__ ()))
3675void rb_define_global_function(const char *mid, VALUE (*func)(), int arity);
3676__attribute__((__nonnull__ ()))
3677void rb_undef_method(VALUE klass, const char *name);
3678__attribute__((__nonnull__ ()))
3679void rb_define_alias(VALUE klass, const char *dst, const char *src);
3680__attribute__((__nonnull__ ()))
3681void rb_define_attr(VALUE klass, const char *name, int read, int write);
3682
3683
3684[[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_m3(VALUE, const char *, VALUE(*)(), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_m2(VALUE, const char *, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_m1(VALUE, const char *, VALUE(*)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_00(VALUE, const char *, VALUE(*)(VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_01(VALUE, const char *, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_02(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_03(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_04(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_05(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_06(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_07(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_08(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_09(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_10(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_11(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_12(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_13(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_14(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_singleton_method"))) static void rb_define_singleton_method_15(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int);
3685[[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_m3(VALUE, const char *, VALUE(*)(), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_m2(VALUE, const char *, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_m1(VALUE, const char *, VALUE(*)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_00(VALUE, const char *, VALUE(*)(VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_01(VALUE, const char *, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_02(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_03(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_04(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_05(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_06(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_07(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_08(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_09(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_10(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_11(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_12(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_13(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_14(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_protected_method"))) static void rb_define_protected_method_15(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int);
3686[[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_m3(VALUE, const char *, VALUE(*)(), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_m2(VALUE, const char *, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_m1(VALUE, const char *, VALUE(*)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_00(VALUE, const char *, VALUE(*)(VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_01(VALUE, const char *, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_02(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_03(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_04(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_05(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_06(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_07(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_08(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_09(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_10(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_11(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_12(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_13(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_14(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_private_method"))) static void rb_define_private_method_15(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int);
3687[[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_m3(VALUE, const char *, VALUE(*)(), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_m2(VALUE, const char *, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_m1(VALUE, const char *, VALUE(*)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_00(VALUE, const char *, VALUE(*)(VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_01(VALUE, const char *, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_02(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_03(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_04(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_05(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_06(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_07(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_08(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_09(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_10(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_11(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_12(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_13(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_14(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_module_function"))) static void rb_define_module_function_15(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int);
3688[[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_m3(const char *, VALUE(*)(), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_m2(const char *, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_m1(const char *, VALUE(*)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_00(const char *, VALUE(*)(VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_01(const char *, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_02(const char *, VALUE(*)(VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_03(const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_04(const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_05(const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_06(const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_07(const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_08(const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_09(const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_10(const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_11(const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_12(const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_13(const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_14(const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_global_function"))) static void rb_define_global_function_15(const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int);
3689[[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_m3(VALUE, ID, VALUE(*)(), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_m2(VALUE, ID, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_m1(VALUE, ID, VALUE(*)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_00(VALUE, ID, VALUE(*)(VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_01(VALUE, ID, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_02(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_03(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_04(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_05(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_06(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_07(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_08(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_09(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_10(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_11(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_12(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_13(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_14(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method_id"))) static void rb_define_method_id_15(VALUE, ID, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int);
3690[[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_m3(VALUE, const char *, VALUE(*)(), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_m2(VALUE, const char *, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_m1(VALUE, const char *, VALUE(*)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_00(VALUE, const char *, VALUE(*)(VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_01(VALUE, const char *, VALUE(*)(VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_02(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_03(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_04(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_05(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_06(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_07(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_08(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_09(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_10(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_11(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_12(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_13(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_14(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); [[maybe_unused]] __attribute__((__nonnull__ ())) __attribute__((__weakref__("rb_define_method"))) static void rb_define_method_15(VALUE, const char *, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int);
3691
3692
3693VALUE rb_int2big(intptr_t i);
3694VALUE rb_int2inum(intptr_t i);
3695VALUE rb_uint2big(uintptr_t i);
3696VALUE rb_uint2inum(uintptr_t i);
3697
3698
3699enum
3700
3701ruby_special_consts {
3702 RUBY_Qfalse = 0x00,
3703 RUBY_Qtrue = 0x14,
3704 RUBY_Qnil = 0x08,
3705 RUBY_Qundef = 0x34,
3706 RUBY_IMMEDIATE_MASK = 0x07,
3707 RUBY_FIXNUM_FLAG = 0x01,
3708 RUBY_FLONUM_MASK = 0x03,
3709 RUBY_FLONUM_FLAG = 0x02,
3710 RUBY_SYMBOL_FLAG = 0x0c,
3712};
3713__attribute__((__const__))
3714
3715__attribute__((__artificial__))
3716static inline _Bool
3717RB_TEST(VALUE obj)
3718{
3719 return obj & ~RUBY_Qnil;
3720}
3721__attribute__((__const__))
3722
3723__attribute__((__artificial__))
3724static inline _Bool
3725RB_NIL_P(VALUE obj)
3726{
3727 return obj == RUBY_Qnil;
3728}
3729__attribute__((__const__))
3730
3731__attribute__((__artificial__))
3732static inline _Bool
3733RB_FIXNUM_P(VALUE obj)
3734{
3735 return obj & RUBY_FIXNUM_FLAG;
3736}
3737__attribute__((__const__))
3738
3739__attribute__((__artificial__))
3740static inline _Bool
3741RB_STATIC_SYM_P(VALUE obj)
3742{
3743
3744 const VALUE mask = ~((0x7fffffffffffffffL * 2UL + 1UL) << RUBY_SPECIAL_SHIFT);
3745 return (obj & mask) == RUBY_SYMBOL_FLAG;
3746}
3747__attribute__((__const__))
3748
3749__attribute__((__artificial__))
3750static inline _Bool
3751RB_FLONUM_P(VALUE obj)
3752{
3753 return (obj & RUBY_FLONUM_MASK) == RUBY_FLONUM_FLAG;
3754}
3755__attribute__((__const__))
3756
3757__attribute__((__artificial__))
3758static inline _Bool
3759RB_IMMEDIATE_P(VALUE obj)
3760{
3761 return obj & RUBY_IMMEDIATE_MASK;
3762}
3763__attribute__((__const__))
3764
3765__attribute__((__artificial__))
3766static inline _Bool
3767RB_SPECIAL_CONST_P(VALUE obj)
3768{
3769 return RB_IMMEDIATE_P(obj) || ! RB_TEST(obj);
3770}
3771__attribute__((__const__))
3772
3773static inline VALUE
3774rb_special_const_p(VALUE obj)
3775{
3776 return RB_SPECIAL_CONST_P(obj) * RUBY_Qtrue;
3777}
3778
3779
3780__attribute__((__noreturn__))
3781__attribute__((__cold__))
3782void rb_out_of_int(long num);
3783long rb_num2long(VALUE num);
3784unsigned long rb_num2ulong(VALUE num);
3785
3786
3787__attribute__((__const__))
3788
3789__attribute__((__artificial__))
3790static inline VALUE
3791RB_INT2FIX(long i)
3792{
3793 ((void)0);
3794 const unsigned long j = i;
3795 const unsigned long k = 2 * j + RUBY_FIXNUM_FLAG;
3796 const long l = k;
3797 const long m = l;
3798 const VALUE n = m;
3799 ((void)0);
3800 return n;
3801}
3802static inline int
3803rb_long2int_inline(long n)
3804{
3805 int i = ((int)n);
3806 if (sizeof(long) <= sizeof(int)) {
3807 ((__builtin_expect(!!(!!(i == n)), 1)) ? ((void)0) : __builtin_unreachable());
3808 }
3809 if (i != n)
3810 rb_out_of_int(n);
3811 return i;
3812}
3813__attribute__((__const__))
3814
3815static inline long
3816rbimpl_fix2long_by_idiv(VALUE x)
3817{
3818 ((void)0);
3819 const long y = x - RUBY_FIXNUM_FLAG;
3820 const long z = y / 2;
3821 const long w = ((long)z);
3822 ((void)0);
3823 return w;
3824}
3825__attribute__((__const__))
3826
3827static inline long
3828rbimpl_fix2long_by_shift(VALUE x)
3829{
3830 ((void)0);
3831 const long y = x;
3832 const long z = y >> 1;
3833 const long w = ((long)z);
3834 ((void)0);
3835 return w;
3836}
3837__attribute__((__const__))
3838
3839static inline _Bool
3840rbimpl_right_shift_is_arithmetic_p(void)
3841{
3842 return (-1 >> 1) == -1;
3843}
3844__attribute__((__const__))
3845
3846static inline long
3847rb_fix2long(VALUE x)
3848{
3849 if (rbimpl_right_shift_is_arithmetic_p()) {
3850 return rbimpl_fix2long_by_shift(x);
3851 }
3852 else {
3853 return rbimpl_fix2long_by_idiv(x);
3854 }
3855}
3856__attribute__((__const__))
3857
3858static inline unsigned long
3859rb_fix2ulong(VALUE x)
3860{
3861 ((void)0);
3862 return rb_fix2long(x);
3863}
3864static inline long
3865rb_num2long_inline(VALUE x)
3866{
3867 if (RB_FIXNUM_P(x))
3868 return rb_fix2long(x);
3869 else
3870 return rb_num2long(x);
3871}
3872static inline unsigned long
3873rb_num2ulong_inline(VALUE x)
3874{
3875 if (RB_FIXNUM_P(x))
3876 return rb_fix2ulong(x);
3877 else
3878 return rb_num2ulong(x);
3879}
3880static inline VALUE
3881rb_long2num_inline(long v)
3882{
3883 if ((((v) < (0x7fffffffffffffffL / 2) + 1) && ((v) >= ((-0x7fffffffffffffffL - 1L) / 2))))
3884 return RB_INT2FIX(v);
3885 else
3886 return rb_int2big(v);
3887}
3888static inline VALUE
3889rb_ulong2num_inline(unsigned long v)
3890{
3891 if (((v) < (0x7fffffffffffffffL / 2) + 1))
3892 return RB_INT2FIX(v);
3893 else
3894 return rb_uint2big(v);
3895}
3896
3897
3898long rb_num2int(VALUE num);
3899long rb_fix2int(VALUE num);
3900unsigned long rb_num2uint(VALUE num);
3901unsigned long rb_fix2uint(VALUE num);
3902
3903
3904__attribute__((__artificial__))
3905static inline int
3906RB_FIX2INT(VALUE x)
3907{
3908 long ret;
3909 if (sizeof(int) < sizeof(long)) {
3910 ret = rb_fix2int(x);
3911 }
3912 else {
3913 ret = rb_fix2long(x);
3914 }
3915 return ((int)ret);
3916}
3917static inline int
3918rb_num2int_inline(VALUE x)
3919{
3920 long ret;
3921 if (sizeof(int) == sizeof(long)) {
3922 ret = rb_num2long_inline(x);
3923 }
3924 else if (RB_FIXNUM_P(x)) {
3925 ret = rb_fix2int(x);
3926 }
3927 else {
3928 ret = rb_num2int(x);
3929 }
3930 return ((int)ret);
3931}
3932__attribute__((__artificial__))
3933static inline unsigned int
3934RB_NUM2UINT(VALUE x)
3935{
3936 unsigned long ret;
3937 if (sizeof(int) < sizeof(long)) {
3938 ret = rb_num2uint(x);
3939 }
3940 else {
3941 ret = rb_num2ulong_inline(x);
3942 }
3943 return ((unsigned int)ret);
3944}
3945__attribute__((__artificial__))
3946static inline unsigned int
3947RB_FIX2UINT(VALUE x)
3948{
3949 unsigned long ret;
3950 if (sizeof(int) < sizeof(long)) {
3951 ret = rb_fix2uint(x);
3952 }
3953 else {
3954 ret = rb_fix2ulong(x);
3955 }
3956 return ((unsigned int)ret);
3957}
3958
3959
3960
3961
3962static inline VALUE
3963rb_int2num_inline(int v)
3964{
3965 if ((((v) < (0x7fffffffffffffffL / 2) + 1) && ((v) >= ((-0x7fffffffffffffffL - 1L) / 2))))
3966 return RB_INT2FIX(v);
3967 else
3968 return rb_int2big(v);
3969}
3970static inline VALUE
3971rb_uint2num_inline(unsigned int v)
3972{
3973 if (((v) < (0x7fffffffffffffffL / 2) + 1))
3974 return RB_INT2FIX(v);
3975 else
3976 return rb_uint2big(v);
3977}
3978
3979
3980enum ruby_rvalue_flags {
3982};
3983struct
3984__attribute__((__aligned__(8)))
3985RBasic {
3986 VALUE flags;
3987 const VALUE klass;
3988};
3989
3990
3991VALUE rb_obj_hide(VALUE obj);
3992VALUE rb_obj_reveal(VALUE obj, VALUE klass);
3993
3994
3995__attribute__((__pure__))
3996__attribute__((__artificial__))
3997static inline VALUE
3998RBASIC_CLASS(VALUE obj)
3999{
4000 ((void)0);
4001 return ((struct RBasic *)(obj))->klass;
4002}
4003typedef enum {
4007 RB_WARN_CATEGORY_ALL_BITS = 0x6
4009enum rb_io_wait_readwrite {RB_IO_WAIT_READABLE, RB_IO_WAIT_WRITABLE};
4010
4011
4012VALUE rb_errinfo(void);
4013void rb_set_errinfo(VALUE err);
4014__attribute__((__noreturn__))
4015__attribute__((__nonnull__ (2)))
4016__attribute__((__format__(__printf__, 2, 3)))
4017void rb_raise(VALUE exc, const char *fmt, ...);
4018__attribute__((__noreturn__))
4019__attribute__((__nonnull__ (1)))
4020__attribute__((__format__(__printf__, 1, 2)))
4021void rb_fatal(const char *fmt, ...);
4022__attribute__((__cold__))
4023__attribute__((__noreturn__))
4024__attribute__((__nonnull__ (1)))
4025__attribute__((__format__(__printf__, 1, 2)))
4026void rb_bug(const char *fmt, ...);
4027__attribute__((__noreturn__))
4028__attribute__((__nonnull__ ()))
4029void rb_bug_errno(const char *msg, int err);
4030__attribute__((__noreturn__))
4031void rb_sys_fail(const char *msg);
4032__attribute__((__noreturn__))
4033void rb_sys_fail_str(VALUE msg);
4034__attribute__((__noreturn__))
4035__attribute__((__nonnull__ (2)))
4036void rb_mod_sys_fail(VALUE mod, const char *msg);
4037__attribute__((__noreturn__))
4038void rb_mod_sys_fail_str(VALUE mod, VALUE msg);
4039__attribute__((__noreturn__))
4040void rb_readwrite_sys_fail(enum rb_io_wait_readwrite waiting, const char *msg);
4041__attribute__((__noreturn__))
4042void rb_iter_break(void);
4043__attribute__((__noreturn__))
4044void rb_iter_break_value(VALUE val);
4045__attribute__((__noreturn__))
4046void rb_exit(int status);
4047__attribute__((__noreturn__))
4048void rb_notimplement(void);
4049VALUE rb_syserr_new(int err, const char * msg);
4050VALUE rb_syserr_new_str(int n, VALUE arg);
4051__attribute__((__noreturn__))
4052void rb_syserr_fail(int err, const char *msg);
4053__attribute__((__noreturn__))
4054void rb_syserr_fail_str(int err, VALUE msg);
4055__attribute__((__noreturn__))
4056__attribute__((__nonnull__ ()))
4057void rb_mod_syserr_fail(VALUE mod, int err, const char *msg);
4058__attribute__((__noreturn__))
4059void rb_mod_syserr_fail_str(VALUE mod, int err, VALUE msg);
4060__attribute__((__noreturn__))
4061void rb_readwrite_syserr_fail(enum rb_io_wait_readwrite waiting, int err, const char *msg);
4062__attribute__((__cold__))
4063__attribute__((__noreturn__))
4064void rb_unexpected_type(VALUE self, int t);
4065VALUE *rb_ruby_verbose_ptr(void);
4066VALUE *rb_ruby_debug_ptr(void);
4067__attribute__((__nonnull__ (1)))
4068__attribute__((__format__(__printf__, 1, 2)))
4069void rb_warning(const char *fmt, ...);
4070__attribute__((__nonnull__ (2)))
4071__attribute__((__format__(__printf__, 2, 3)))
4072void rb_category_warning(rb_warning_category_t cat, const char *fmt, ...);
4073__attribute__((__nonnull__ (1, 3)))
4074__attribute__((__format__(__printf__, 3, 4)))
4075void rb_compile_warning(const char *file, int line, const char *fmt, ...);
4076__attribute__((__nonnull__ (1)))
4077__attribute__((__format__(__printf__, 1, 2)))
4078void rb_sys_warning(const char *fmt, ...);
4079__attribute__((__cold__))
4080__attribute__((__nonnull__ (1)))
4081__attribute__((__format__(__printf__, 1, 2)))
4082void rb_warn(const char *fmt, ...);
4083__attribute__((__cold__))
4084__attribute__((__nonnull__ (2)))
4085__attribute__((__format__(__printf__, 2, 3)))
4086void rb_category_warn(rb_warning_category_t cat, const char *fmt, ...);
4087__attribute__((__nonnull__ (1, 3)))
4088__attribute__((__format__(__printf__, 3, 4)))
4089void rb_compile_warn(const char *file, int line, const char *fmt, ...);
4090__attribute__((__nonnull__ (2, 4)))
4091__attribute__((__format__(__printf__, 4, 5)))
4092void rb_category_compile_warn(rb_warning_category_t cat, const char *file, int line, const char *fmt, ...);
4093
4094
4095enum
4096
4097ruby_value_type {
4098 RUBY_T_NONE = 0x00,
4099 RUBY_T_OBJECT = 0x01,
4100 RUBY_T_CLASS = 0x02,
4101 RUBY_T_MODULE = 0x03,
4102 RUBY_T_FLOAT = 0x04,
4103 RUBY_T_STRING = 0x05,
4104 RUBY_T_REGEXP = 0x06,
4105 RUBY_T_ARRAY = 0x07,
4106 RUBY_T_HASH = 0x08,
4107 RUBY_T_STRUCT = 0x09,
4108 RUBY_T_BIGNUM = 0x0a,
4109 RUBY_T_FILE = 0x0b,
4110 RUBY_T_DATA = 0x0c,
4111 RUBY_T_MATCH = 0x0d,
4112 RUBY_T_COMPLEX = 0x0e,
4113 RUBY_T_RATIONAL = 0x0f,
4114 RUBY_T_NIL = 0x11,
4115 RUBY_T_TRUE = 0x12,
4116 RUBY_T_FALSE = 0x13,
4117 RUBY_T_SYMBOL = 0x14,
4118 RUBY_T_FIXNUM = 0x15,
4119 RUBY_T_UNDEF = 0x16,
4120 RUBY_T_IMEMO = 0x1a,
4121 RUBY_T_NODE = 0x1b,
4122 RUBY_T_ICLASS = 0x1c,
4123 RUBY_T_ZOMBIE = 0x1d,
4124 RUBY_T_MOVED = 0x1e,
4125 RUBY_T_MASK = 0x1f
4126};
4127
4128
4129__attribute__((__cold__))
4130void rb_check_type(VALUE obj, int t);
4131
4132
4133__attribute__((__pure__))
4134__attribute__((__artificial__))
4135static inline enum ruby_value_type
4136RB_BUILTIN_TYPE(VALUE obj)
4137{
4138 ((void)0);
4139 VALUE ret = ((struct RBasic *)(obj))->flags & RUBY_T_MASK;
4140 return ((enum ruby_value_type)ret);
4141}
4142__attribute__((__pure__))
4143static inline _Bool
4144rb_integer_type_p(VALUE obj)
4145{
4146 if (RB_FIXNUM_P(obj)) {
4147 return 1;
4148 }
4149 else if (RB_SPECIAL_CONST_P(obj)) {
4150 return 0;
4151 }
4152 else {
4153 return RB_BUILTIN_TYPE(obj) == RUBY_T_BIGNUM;
4154 }
4155}
4156__attribute__((__pure__))
4157static inline enum ruby_value_type
4158rb_type(VALUE obj)
4159{
4160 if (! RB_SPECIAL_CONST_P(obj)) {
4161 return RB_BUILTIN_TYPE(obj);
4162 }
4163 else if (obj == ((VALUE)RUBY_Qfalse)) {
4164 return RUBY_T_FALSE;
4165 }
4166 else if (obj == ((VALUE)RUBY_Qnil)) {
4167 return RUBY_T_NIL;
4168 }
4169 else if (obj == ((VALUE)RUBY_Qtrue)) {
4170 return RUBY_T_TRUE;
4171 }
4172 else if (obj == ((VALUE)RUBY_Qundef)) {
4173 return RUBY_T_UNDEF;
4174 }
4175 else if (RB_FIXNUM_P(obj)) {
4176 return RUBY_T_FIXNUM;
4177 }
4178 else if (RB_STATIC_SYM_P(obj)) {
4179 return RUBY_T_SYMBOL;
4180 }
4181 else {
4182 ((__builtin_expect(!!(!!(RB_FLONUM_P(obj))), 1)) ? ((void)0) : __builtin_unreachable());
4183 return RUBY_T_FLOAT;
4184 }
4185}
4186__attribute__((__pure__))
4187__attribute__((__artificial__))
4188static inline _Bool
4189RB_FLOAT_TYPE_P(VALUE obj)
4190{
4191 if (RB_FLONUM_P(obj)) {
4192 return 1;
4193 }
4194 else if (RB_SPECIAL_CONST_P(obj)) {
4195 return 0;
4196 }
4197 else {
4198 return RB_BUILTIN_TYPE(obj) == RUBY_T_FLOAT;
4199 }
4200}
4201__attribute__((__pure__))
4202__attribute__((__artificial__))
4203static inline _Bool
4204RB_DYNAMIC_SYM_P(VALUE obj)
4205{
4206 if (RB_SPECIAL_CONST_P(obj)) {
4207 return 0;
4208 }
4209 else {
4210 return RB_BUILTIN_TYPE(obj) == RUBY_T_SYMBOL;
4211 }
4212}
4213__attribute__((__pure__))
4214__attribute__((__artificial__))
4215static inline _Bool
4216RB_SYMBOL_P(VALUE obj)
4217{
4218 return RB_STATIC_SYM_P(obj) || RB_DYNAMIC_SYM_P(obj);
4219}
4220__attribute__((__pure__))
4221__attribute__((__artificial__))
4222__attribute__((__always_inline__)) inline
4223static _Bool
4224rbimpl_RB_TYPE_P_fastpath(VALUE obj, enum ruby_value_type t)
4225{
4226 if (t == RUBY_T_TRUE) {
4227 return obj == ((VALUE)RUBY_Qtrue);
4228 }
4229 else if (t == RUBY_T_FALSE) {
4230 return obj == ((VALUE)RUBY_Qfalse);
4231 }
4232 else if (t == RUBY_T_NIL) {
4233 return obj == ((VALUE)RUBY_Qnil);
4234 }
4235 else if (t == RUBY_T_UNDEF) {
4236 return obj == ((VALUE)RUBY_Qundef);
4237 }
4238 else if (t == RUBY_T_FIXNUM) {
4239 return RB_FIXNUM_P(obj);
4240 }
4241 else if (t == RUBY_T_SYMBOL) {
4242 return RB_SYMBOL_P(obj);
4243 }
4244 else if (t == RUBY_T_FLOAT) {
4245 return RB_FLOAT_TYPE_P(obj);
4246 }
4247 else if (RB_SPECIAL_CONST_P(obj)) {
4248 return 0;
4249 }
4250 else if (t == RB_BUILTIN_TYPE(obj)) {
4251 return 1;
4252 }
4253 else {
4254 return 0;
4255 }
4256}
4257__attribute__((__pure__))
4258__attribute__((__artificial__))
4259static inline _Bool
4260RB_TYPE_P(VALUE obj, enum ruby_value_type t)
4261{
4262 if (__builtin_constant_p(t)) {
4263 return rbimpl_RB_TYPE_P_fastpath(obj, t);
4264 }
4265 else {
4266 return t == rb_type(obj);
4267 }
4268}
4269__attribute__((__pure__))
4270__attribute__((__artificial__))
4271static inline _Bool rbimpl_rtypeddata_p(VALUE obj);
4272__attribute__((__artificial__))
4273static inline void
4274Check_Type(VALUE v, enum ruby_value_type t)
4275{
4276 if ((__builtin_expect(!!(! RB_TYPE_P(v, t)), 0))) {
4277 goto unexpected_type;
4278 }
4279 else if (t == RUBY_T_DATA && rbimpl_rtypeddata_p(v)) {
4280 goto unexpected_type;
4281 }
4282 else {
4283 return;
4284 }
4285 unexpected_type:
4286 rb_unexpected_type(v, t);
4287}
4288enum ruby_fl_ushift {
4289 RUBY_FL_USHIFT = 12
4290};
4291__extension__
4292enum
4293
4294ruby_fl_type {
4295 RUBY_FL_WB_PROTECTED = (1<<5),
4296 RUBY_FL_PROMOTED0 = (1<<5),
4297 RUBY_FL_PROMOTED1 = (1<<6),
4299 RUBY_FL_FINALIZE = (1<<7),
4301 __attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
4302 = (1<<8),
4303 RUBY_FL_SHAREABLE = (1<<8),
4305 __attribute__((__deprecated__ ("trustedness turned out to be a wrong idea.")))
4306 = (1<<8),
4307 RUBY_FL_SEEN_OBJ_ID = (1<<9),
4308 RUBY_FL_EXIVAR = (1<<10),
4309 RUBY_FL_FREEZE = (1<<11),
4310 RUBY_FL_USER0 = (1<<(RUBY_FL_USHIFT+0)),
4311 RUBY_FL_USER1 = (1<<(RUBY_FL_USHIFT+1)),
4312 RUBY_FL_USER2 = (1<<(RUBY_FL_USHIFT+2)),
4313 RUBY_FL_USER3 = (1<<(RUBY_FL_USHIFT+3)),
4314 RUBY_FL_USER4 = (1<<(RUBY_FL_USHIFT+4)),
4315 RUBY_FL_USER5 = (1<<(RUBY_FL_USHIFT+5)),
4316 RUBY_FL_USER6 = (1<<(RUBY_FL_USHIFT+6)),
4317 RUBY_FL_USER7 = (1<<(RUBY_FL_USHIFT+7)),
4318 RUBY_FL_USER8 = (1<<(RUBY_FL_USHIFT+8)),
4319 RUBY_FL_USER9 = (1<<(RUBY_FL_USHIFT+9)),
4320 RUBY_FL_USER10 = (1<<(RUBY_FL_USHIFT+10)),
4321 RUBY_FL_USER11 = (1<<(RUBY_FL_USHIFT+11)),
4322 RUBY_FL_USER12 = (1<<(RUBY_FL_USHIFT+12)),
4323 RUBY_FL_USER13 = (1<<(RUBY_FL_USHIFT+13)),
4324 RUBY_FL_USER14 = (1<<(RUBY_FL_USHIFT+14)),
4325 RUBY_FL_USER15 = (1<<(RUBY_FL_USHIFT+15)),
4326 RUBY_FL_USER16 = (1<<(RUBY_FL_USHIFT+16)),
4327 RUBY_FL_USER17 = (1<<(RUBY_FL_USHIFT+17)),
4328 RUBY_FL_USER18 = (1<<(RUBY_FL_USHIFT+18)),
4329 RUBY_FL_USER19 = (1<<(RUBY_FL_USHIFT+19)),
4332};
4333enum {
4335 __attribute__((__deprecated__ ("It seems there is no actual usage of this enum.")))
4336 = (int)RUBY_T_MASK | (int)RUBY_FL_EXIVAR
4337};
4338
4339
4340void rb_obj_infect(VALUE victim, VALUE carrier);
4341void rb_freeze_singleton_class(VALUE klass);
4342
4343
4344__attribute__((__pure__))
4345__attribute__((__artificial__))
4346__attribute__((__always_inline__)) inline
4347static _Bool
4348RB_FL_ABLE(VALUE obj)
4349{
4350 if (RB_SPECIAL_CONST_P(obj)) {
4351 return 0;
4352 }
4353 else if (RB_TYPE_P(obj, RUBY_T_NODE)) {
4354 return 0;
4355 }
4356 else {
4357 return 1;
4358 }
4359}
4360__attribute__((__pure__))
4361__attribute__((__artificial__))
4362static inline VALUE
4363RB_FL_TEST_RAW(VALUE obj, VALUE flags)
4364{
4365 ((void)0);
4366 return ((struct RBasic *)(obj))->flags & flags;
4367}
4368__attribute__((__pure__))
4369__attribute__((__artificial__))
4370static inline VALUE
4371RB_FL_TEST(VALUE obj, VALUE flags)
4372{
4373 if (RB_FL_ABLE(obj)) {
4374 return RB_FL_TEST_RAW(obj, flags);
4375 }
4376 else {
4377 return 0UL;
4378 }
4379}
4380__attribute__((__pure__))
4381__attribute__((__artificial__))
4382static inline _Bool
4383RB_FL_ANY_RAW(VALUE obj, VALUE flags)
4384{
4385 return RB_FL_TEST_RAW(obj, flags);
4386}
4387__attribute__((__pure__))
4388__attribute__((__artificial__))
4389static inline _Bool
4390RB_FL_ANY(VALUE obj, VALUE flags)
4391{
4392 return RB_FL_TEST(obj, flags);
4393}
4394__attribute__((__pure__))
4395__attribute__((__artificial__))
4396static inline _Bool
4397RB_FL_ALL_RAW(VALUE obj, VALUE flags)
4398{
4399 return RB_FL_TEST_RAW(obj, flags) == flags;
4400}
4401__attribute__((__pure__))
4402__attribute__((__artificial__))
4403static inline _Bool
4404RB_FL_ALL(VALUE obj, VALUE flags)
4405{
4406 return RB_FL_TEST(obj, flags) == flags;
4407}
4408
4409__attribute__((__artificial__))
4410static inline void
4411rbimpl_fl_set_raw_raw(struct RBasic *obj, VALUE flags)
4412{
4413 obj->flags |= flags;
4414}
4415__attribute__((__artificial__))
4416static inline void
4417RB_FL_SET_RAW(VALUE obj, VALUE flags)
4418{
4419 ((void)0);
4420 rbimpl_fl_set_raw_raw(((struct RBasic *)(obj)), flags);
4421}
4422__attribute__((__artificial__))
4423static inline void
4424RB_FL_SET(VALUE obj, VALUE flags)
4425{
4426 if (RB_FL_ABLE(obj)) {
4427 RB_FL_SET_RAW(obj, flags);
4428 }
4429}
4430
4431__attribute__((__artificial__))
4432static inline void
4433rbimpl_fl_unset_raw_raw(struct RBasic *obj, VALUE flags)
4434{
4435 obj->flags &= ~flags;
4436}
4437__attribute__((__artificial__))
4438static inline void
4439RB_FL_UNSET_RAW(VALUE obj, VALUE flags)
4440{
4441 ((void)0);
4442 rbimpl_fl_unset_raw_raw(((struct RBasic *)(obj)), flags);
4443}
4444__attribute__((__artificial__))
4445static inline void
4446RB_FL_UNSET(VALUE obj, VALUE flags)
4447{
4448 if (RB_FL_ABLE(obj)) {
4449 RB_FL_UNSET_RAW(obj, flags);
4450 }
4451}
4452
4453__attribute__((__artificial__))
4454static inline void
4455rbimpl_fl_reverse_raw_raw(struct RBasic *obj, VALUE flags)
4456{
4457 obj->flags ^= flags;
4458}
4459__attribute__((__artificial__))
4460static inline void
4461RB_FL_REVERSE_RAW(VALUE obj, VALUE flags)
4462{
4463 ((void)0);
4464 rbimpl_fl_reverse_raw_raw(((struct RBasic *)(obj)), flags);
4465}
4466__attribute__((__artificial__))
4467static inline void
4468RB_FL_REVERSE(VALUE obj, VALUE flags)
4469{
4470 if (RB_FL_ABLE(obj)) {
4472 }
4473}
4474__attribute__((__pure__))
4475__attribute__((__artificial__))
4476__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
4477static inline _Bool
4478RB_OBJ_TAINTABLE(VALUE obj)
4479{
4480 return 0;
4481}
4482__attribute__((__pure__))
4483__attribute__((__artificial__))
4484__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
4485static inline VALUE
4486RB_OBJ_TAINTED_RAW(VALUE obj)
4487{
4488 return 0;
4489}
4490__attribute__((__pure__))
4491__attribute__((__artificial__))
4492__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
4493static inline _Bool
4494RB_OBJ_TAINTED(VALUE obj)
4495{
4496 return 0;
4497}
4498__attribute__((__artificial__))
4499__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
4500static inline void
4501RB_OBJ_TAINT_RAW(VALUE obj)
4502{
4503 return;
4504}
4505__attribute__((__artificial__))
4506__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
4507static inline void
4508RB_OBJ_TAINT(VALUE obj)
4509{
4510 return;
4511}
4512__attribute__((__artificial__))
4513__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
4514static inline void
4515RB_OBJ_INFECT_RAW(VALUE dst, VALUE src)
4516{
4517 return;
4518}
4519__attribute__((__artificial__))
4520__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
4521static inline void
4522RB_OBJ_INFECT(VALUE dst, VALUE src)
4523{
4524 return;
4525}
4526__attribute__((__pure__))
4527__attribute__((__artificial__))
4528static inline VALUE
4529RB_OBJ_FROZEN_RAW(VALUE obj)
4530{
4531 return RB_FL_TEST_RAW(obj, RUBY_FL_FREEZE);
4532}
4533__attribute__((__pure__))
4534__attribute__((__artificial__))
4535static inline _Bool
4536RB_OBJ_FROZEN(VALUE obj)
4537{
4538 if (! RB_FL_ABLE(obj)) {
4539 return 1;
4540 }
4541 else {
4542 return RB_OBJ_FROZEN_RAW(obj);
4543 }
4544}
4545__attribute__((__artificial__))
4546static inline void
4547RB_OBJ_FREEZE_RAW(VALUE obj)
4548{
4550}
4551static inline void
4552rb_obj_freeze_inline(VALUE x)
4553{
4554 if (RB_FL_ABLE(x)) {
4556 if (RBASIC_CLASS(x) && !(((struct RBasic *)(x))->flags & RUBY_FL_SINGLETON)) {
4557 rb_freeze_singleton_class(x);
4558 }
4559 }
4560}
4561enum ruby_rstring_flags {
4562 RSTRING_NOEMBED = RUBY_FL_USER1,
4563 RSTRING_EMBED_LEN_MASK = RUBY_FL_USER2 | RUBY_FL_USER3 | RUBY_FL_USER4 |
4565 RSTRING_FSTR = RUBY_FL_USER17
4566};
4567enum ruby_rstring_consts {
4568 RSTRING_EMBED_LEN_SHIFT = RUBY_FL_USHIFT + 2,
4569 RSTRING_EMBED_LEN_MAX = ((int)(sizeof(VALUE[3]) / (sizeof(char)))) - 1
4570};
4571struct RString {
4572 struct RBasic basic;
4573 union {
4574 struct {
4575 long len;
4576 char *ptr;
4577 union {
4578 long capa;
4579 VALUE shared;
4580 } aux;
4581 } heap;
4582 struct {
4583 char ary[RSTRING_EMBED_LEN_MAX + 1];
4584 } embed;
4585 } as;
4586};
4587
4588
4589VALUE rb_str_to_str(VALUE obj);
4590VALUE rb_string_value(volatile VALUE *ptr);
4591char *rb_string_value_ptr(volatile VALUE *ptr);
4592char *rb_string_value_cstr(volatile VALUE *ptr);
4593VALUE rb_str_export(VALUE obj);
4594VALUE rb_str_export_locale(VALUE obj);
4595__attribute__((__error__ ("rb_check_safe_str() and Check_SafeStr() are obsolete; use StringValue() instead")))
4596void rb_check_safe_str(VALUE);
4597void rb_debug_rstring_null_ptr(const char *func);
4598
4599
4600__attribute__((__pure__))
4601__attribute__((__artificial__))
4602static inline long
4603RSTRING_EMBED_LEN(VALUE str)
4604{
4605 ((void)0);
4606 ((void)0);
4607 VALUE f = ((struct RBasic *)(str))->flags;
4608 f &= RSTRING_EMBED_LEN_MASK;
4609 f >>= RSTRING_EMBED_LEN_SHIFT;
4610 return ((long)f);
4611}
4612
4613
4614__attribute__((__pure__))
4615__attribute__((__artificial__))
4616static inline struct RString
4617rbimpl_rstring_getmem(VALUE str)
4618{
4619 ((void)0);
4620 if (RB_FL_ANY_RAW(str, RSTRING_NOEMBED)) {
4621 return *((struct RString *)(str));
4622 }
4623 else {
4624 struct RString retval;
4625 retval.as.heap.len = RSTRING_EMBED_LEN(str);
4626 retval.as.heap.ptr = ((struct RString *)(str))->as.embed.ary;
4627 return retval;
4628 }
4629}
4630
4631
4632__attribute__((__pure__))
4633__attribute__((__artificial__))
4634static inline long
4635RSTRING_LEN(VALUE str)
4636{
4637 return rbimpl_rstring_getmem(str).as.heap.len;
4638}
4639__attribute__((__artificial__))
4640static inline char *
4641RSTRING_PTR(VALUE str)
4642{
4643 char *ptr = rbimpl_rstring_getmem(str).as.heap.ptr;
4644 if ((__builtin_expect(!!(! ptr), 0))) {
4645 rb_debug_rstring_null_ptr("RSTRING_PTR");
4646 }
4647 return ptr;
4648}
4649__attribute__((__artificial__))
4650static inline char *
4651RSTRING_END(VALUE str)
4652{
4653 struct RString buf = rbimpl_rstring_getmem(str);
4654 if ((__builtin_expect(!!(! buf.as.heap.ptr), 0))) {
4655 rb_debug_rstring_null_ptr("RSTRING_END");
4656 }
4657 return &buf.as.heap.ptr[buf.as.heap.len];
4658}
4659__attribute__((__artificial__))
4660static inline int
4661RSTRING_LENINT(VALUE str)
4662{
4663 return rb_long2int_inline(RSTRING_LEN(str));
4664}
4665__attribute__((__const__))
4666
4667__attribute__((__artificial__))
4668static inline VALUE
4669RB_CHR2FIX(unsigned char c)
4670{
4671 return RB_INT2FIX(c);
4672}
4673static inline char
4674rb_num2char_inline(VALUE x)
4675{
4676 if (RB_TYPE_P(x, RUBY_T_STRING) && (RSTRING_LEN(x)>=1))
4677 return RSTRING_PTR(x)[0];
4678 else
4679 return ((char)rb_num2int_inline(x));
4680}
4681
4682
4683double rb_num2dbl(VALUE num);
4684__attribute__((__pure__))
4685double rb_float_value(VALUE num);
4686VALUE rb_float_new(double d);
4687VALUE rb_float_new_in_heap(double d);
4688
4689
4690
4691
4692VALUE rb_ll2inum(long long num);
4693VALUE rb_ull2inum(unsigned long long num);
4694long long rb_num2ll(VALUE num);
4695unsigned long long rb_num2ull(VALUE num);
4696
4697
4698static inline VALUE
4699rb_ll2num_inline(long long n)
4700{
4701 if ((((n) < (0x7fffffffffffffffL / 2) + 1) && ((n) >= ((-0x7fffffffffffffffL - 1L) / 2)))) return RB_INT2FIX((long)n);
4702 return rb_ll2inum(n);
4703}
4704static inline VALUE
4705rb_ull2num_inline(unsigned long long n)
4706{
4707 if (((n) < (0x7fffffffffffffffL / 2) + 1)) return RB_INT2FIX((long)n);
4708 return rb_ull2inum(n);
4709}
4710static inline long long
4711rb_num2ll_inline(VALUE x)
4712{
4713 if (RB_FIXNUM_P(x))
4714 return rb_fix2long(x);
4715 else
4716 return rb_num2ll(x);
4717}
4718static inline unsigned long long
4719rb_num2ull_inline(VALUE x)
4720{
4721 if (RB_FIXNUM_P(x))
4722 return rb_fix2long(x);
4723 else
4724 return rb_num2ull(x);
4725}
4726
4727
4728short rb_num2short(VALUE num);
4729unsigned short rb_num2ushort(VALUE num);
4730short rb_fix2short(VALUE num);
4731unsigned short rb_fix2ushort(VALUE num);
4732
4733
4734static inline short
4735rb_num2short_inline(VALUE x)
4736{
4737 if (RB_FIXNUM_P(x))
4738 return rb_fix2short(x);
4739 else
4740 return rb_num2short(x);
4741}
4742
4743
4744typedef unsigned long st_data_t;
4745typedef struct st_table st_table;
4746typedef st_data_t st_index_t;
4747typedef int st_compare_func(st_data_t, st_data_t);
4748typedef st_index_t st_hash_func(st_data_t);
4749typedef char st_check_for_sizeof_st_index_t[8 == (int)sizeof(st_index_t) ? 1 : -1];
4750struct st_hash_type {
4751 int (*compare)(st_data_t, st_data_t);
4752 st_index_t (*hash)(st_data_t);
4753};
4754typedef struct st_table_entry st_table_entry;
4755struct st_table_entry;
4756struct st_table {
4757 unsigned char entry_power, bin_power, size_ind;
4758 unsigned int rebuilds_num;
4759 const struct st_hash_type *type;
4760 st_index_t num_entries;
4761 st_index_t *bins;
4762 st_index_t entries_start, entries_bound;
4763 st_table_entry *entries;
4764};
4765enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK, ST_REPLACE};
4766st_table *rb_st_init_table(const struct st_hash_type *);
4767st_table *rb_st_init_table_with_size(const struct st_hash_type *, st_index_t);
4768st_table *rb_st_init_numtable(void);
4769st_table *rb_st_init_numtable_with_size(st_index_t);
4770st_table *rb_st_init_strtable(void);
4771st_table *rb_st_init_strtable_with_size(st_index_t);
4772st_table *rb_st_init_strcasetable(void);
4773st_table *rb_st_init_strcasetable_with_size(st_index_t);
4774int rb_st_delete(st_table *, st_data_t *, st_data_t *);
4775int rb_st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t);
4776int rb_st_shift(st_table *, st_data_t *, st_data_t *);
4777int rb_st_insert(st_table *, st_data_t, st_data_t);
4778int rb_st_insert2(st_table *, st_data_t, st_data_t, st_data_t (*)(st_data_t));
4779int rb_st_lookup(st_table *, st_data_t, st_data_t *);
4780int rb_st_get_key(st_table *, st_data_t, st_data_t *);
4781typedef int st_update_callback_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing);
4782int rb_st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data_t arg);
4783typedef int st_foreach_callback_func(st_data_t, st_data_t, st_data_t);
4784typedef int st_foreach_check_callback_func(st_data_t, st_data_t, st_data_t, int);
4785int rb_st_foreach_with_replace(st_table *tab, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
4786int rb_st_foreach(st_table *, st_foreach_callback_func *, st_data_t);
4787int rb_st_foreach_check(st_table *, st_foreach_check_callback_func *, st_data_t, st_data_t);
4788st_index_t rb_st_keys(st_table *table, st_data_t *keys, st_index_t size);
4789st_index_t rb_st_keys_check(st_table *table, st_data_t *keys, st_index_t size, st_data_t never);
4790st_index_t rb_st_values(st_table *table, st_data_t *values, st_index_t size);
4791st_index_t rb_st_values_check(st_table *table, st_data_t *values, st_index_t size, st_data_t never);
4792void rb_st_add_direct(st_table *, st_data_t, st_data_t);
4793void rb_st_free_table(st_table *);
4794void rb_st_cleanup_safe(st_table *, st_data_t);
4795void rb_st_clear(st_table *);
4796st_table *rb_st_copy(st_table *);
4797__attribute__((__const__)) int rb_st_numcmp(st_data_t, st_data_t);
4798__attribute__((__const__)) st_index_t rb_st_numhash(st_data_t);
4799__attribute__((__pure__)) int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
4800__attribute__((__pure__)) int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
4801__attribute__((__pure__)) size_t rb_st_memsize(const st_table *);
4802__attribute__((__pure__)) st_index_t rb_st_hash(const void *ptr, size_t len, st_index_t h);
4803__attribute__((__const__)) st_index_t rb_st_hash_uint32(st_index_t h, uint32_t i);
4804__attribute__((__const__)) st_index_t rb_st_hash_uint(st_index_t h, st_index_t i);
4805__attribute__((__const__)) st_index_t rb_st_hash_end(st_index_t h);
4806__attribute__((__const__)) st_index_t rb_st_hash_start(st_index_t h);
4807void rb_hash_bulk_insert_into_st_table(long, const VALUE *, VALUE);
4808
4809
4810__attribute__((__const__))
4811
4812__attribute__((__artificial__))
4813static inline VALUE
4814RB_ST2FIX(st_data_t i)
4815{
4816 long x = i;
4817 if (x >= 0) {
4818 x &= (0x7fffffffffffffffL / 2);
4819 }
4820 else {
4821 x |= ((-0x7fffffffffffffffL - 1L) / 2);
4822 }
4823 ((void)0);
4824 unsigned long y = ((unsigned long)x);
4825 return RB_INT2FIX(y);
4826}
4827
4828
4829void rb_gc_writebarrier(VALUE old, VALUE young);
4830void rb_gc_writebarrier_unprotect(VALUE obj);
4831
4832
4833__attribute__((__pure__))
4834__attribute__((__artificial__))
4835static inline _Bool
4836RB_OBJ_PROMOTED_RAW(VALUE obj)
4837{
4838 ((void)0);
4839 return RB_FL_ANY_RAW(obj, RUBY_FL_PROMOTED);
4840}
4841__attribute__((__pure__))
4842__attribute__((__artificial__))
4843static inline _Bool
4844RB_OBJ_PROMOTED(VALUE obj)
4845{
4846 if (! RB_FL_ABLE(obj)) {
4847 return 0;
4848 }
4849 else {
4850 return RB_OBJ_PROMOTED_RAW(obj);
4851 }
4852}
4853static inline VALUE
4855 VALUE x,
4856 [[maybe_unused]]
4857 const char *filename,
4858 [[maybe_unused]]
4859 int line)
4860{
4862 return x;
4863}
4864static inline VALUE
4865rb_obj_written(
4866 VALUE a,
4867 [[maybe_unused]]
4868 VALUE oldv,
4869 VALUE b,
4870 [[maybe_unused]]
4871 const char *filename,
4872 [[maybe_unused]]
4873 int line)
4874{
4875 if (!RB_SPECIAL_CONST_P(b)) {
4876 rb_gc_writebarrier(a, b);
4877 }
4878 return a;
4879}
4880static inline VALUE
4881rb_obj_write(
4882 VALUE a, VALUE *slot, VALUE b,
4883 [[maybe_unused]]
4884 const char *filename,
4885 [[maybe_unused]]
4886 int line)
4887{
4888 *slot = b;
4889 rb_obj_written(a, ((VALUE)RUBY_Qundef) , b, filename, line);
4890 return a;
4891}
4892enum ruby_rarray_flags {
4893 RARRAY_EMBED_FLAG = RUBY_FL_USER1,
4894 RARRAY_EMBED_LEN_MASK = RUBY_FL_USER4 | RUBY_FL_USER3
4895 ,
4896 RARRAY_TRANSIENT_FLAG = RUBY_FL_USER13
4897};
4898enum ruby_rarray_consts {
4900 RARRAY_EMBED_LEN_MAX = ((int)(sizeof(VALUE[3]) / (sizeof(VALUE))))
4901};
4902struct RArray {
4903 struct RBasic basic;
4904 union {
4905 struct {
4906 long len;
4907 union {
4908 long capa;
4909 const
4910 VALUE shared_root;
4911 } aux;
4912 const VALUE *ptr;
4913 } heap;
4914 const VALUE ary[RARRAY_EMBED_LEN_MAX];
4915 } as;
4916};
4917
4918
4919VALUE *rb_ary_ptr_use_start(VALUE ary);
4920void rb_ary_ptr_use_end(VALUE a);
4921void rb_ary_detransient(VALUE a);
4922
4923
4924__attribute__((__pure__))
4925__attribute__((__artificial__))
4926static inline long
4927RARRAY_EMBED_LEN(VALUE ary)
4928{
4929 ((void)0);
4930 ((void)0);
4931 VALUE f = ((struct RBasic *)(ary))->flags;
4932 f &= RARRAY_EMBED_LEN_MASK;
4934 return ((long)f);
4935}
4936__attribute__((__pure__))
4937static inline long
4938rb_array_len(VALUE a)
4939{
4940 ((void)0);
4941 if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
4942 return RARRAY_EMBED_LEN(a);
4943 }
4944 else {
4945 return ((struct RArray *)(a))->as.heap.len;
4946 }
4947}
4948__attribute__((__artificial__))
4949static inline int
4950RARRAY_LENINT(VALUE ary)
4951{
4952 return rb_long2int_inline(rb_array_len(ary));
4953}
4954__attribute__((__pure__))
4955__attribute__((__artificial__))
4956static inline _Bool
4957RARRAY_TRANSIENT_P(VALUE ary)
4958{
4959 ((void)0);
4960 return RB_FL_ANY_RAW(ary, RARRAY_TRANSIENT_FLAG);
4961}
4962__attribute__((__pure__))
4963static inline const VALUE *
4964rb_array_const_ptr_transient(VALUE a)
4965{
4966 ((void)0);
4967 if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
4968 return (((struct RArray *)(a))->as.ary);
4969 }
4970 else {
4971 return (((struct RArray *)(a))->as.heap.ptr);
4972 }
4973}
4974static inline const VALUE *
4975rb_array_const_ptr(VALUE a)
4976{
4977 ((void)0);
4978 if (RARRAY_TRANSIENT_P(a)) {
4980 }
4981 return rb_array_const_ptr_transient(a);
4982}
4983static inline VALUE *
4984rb_array_ptr_use_start(VALUE a,
4985 [[maybe_unused]]
4986 int allow_transient)
4987{
4988 ((void)0);
4989 if (!allow_transient) {
4990 if (RARRAY_TRANSIENT_P(a)) {
4992 }
4993 }
4994 return rb_ary_ptr_use_start(a);
4995}
4996static inline void
4997rb_array_ptr_use_end(VALUE a,
4998 [[maybe_unused]]
4999 int allow_transient)
5000{
5001 ((void)0);
5002 rb_ary_ptr_use_end(a);
5003}
5004static inline VALUE *
5005RARRAY_PTR(VALUE ary)
5006{
5007 ((void)0);
5008 VALUE tmp = (1 ? rb_obj_wb_unprotect(ary, "./include/ruby/internal/core/rarray.h", 555) : ary);
5009 return ((VALUE *)rb_array_const_ptr(tmp));
5010}
5011static inline void
5012RARRAY_ASET(VALUE ary, long i, VALUE v)
5013{
5014 do { ((void)0); const VALUE rbimpl_ary = (ary); VALUE *ptr = rb_array_ptr_use_start(rbimpl_ary, (1)); (rb_obj_write((VALUE)(ary), (VALUE *)(&ptr[i]), (VALUE)(v), "./include/ruby/internal/core/rarray.h", 574)); rb_array_ptr_use_end(rbimpl_ary, (1)); } while (0);
5015}
5016
5017
5018int rb_big_sign(VALUE num);
5019
5020
5021static inline _Bool
5022RBIGNUM_POSITIVE_P(VALUE b)
5023{
5024 ((void)0);
5025 return rb_big_sign(b);
5026}
5027static inline _Bool
5028RBIGNUM_NEGATIVE_P(VALUE b)
5029{
5030 ((void)0);
5031 return ! RBIGNUM_POSITIVE_P(b);
5032}
5033enum ruby_rmodule_flags {
5034 RMODULE_IS_OVERLAID = RUBY_FL_USER2,
5035 RMODULE_IS_REFINEMENT = RUBY_FL_USER3,
5036 RMODULE_INCLUDED_INTO_REFINEMENT = RUBY_FL_USER4
5037};
5038struct RClass;
5039
5040
5041VALUE rb_class_get_superclass(VALUE klass);
5042
5043
5044typedef void (*RUBY_DATA_FUNC)(void*);
5045struct RData {
5046 struct RBasic basic;
5049 void *data;
5050};
5051
5052
5053VALUE rb_data_object_wrap(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);
5054VALUE rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);
5055extern VALUE rb_cObject;
5056
5057
5058__attribute__((__warning__ ("untyped Data is unsafe; use TypedData instead"))) __attribute__((__deprecated__ ("by TypedData")))
5059static inline VALUE
5060rb_data_object_wrap_warning(VALUE klass, void *ptr, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free)
5061{
5062 return rb_data_object_wrap(klass, ptr, mark, free);
5063}
5064static inline void *
5065rb_data_object_get(VALUE obj)
5066{
5067 Check_Type(obj, RUBY_T_DATA);
5068 return ((struct RData *)(obj))->data;
5069}
5070__attribute__((__warning__ ("untyped Data is unsafe; use TypedData instead"))) __attribute__((__deprecated__ ("by TypedData")))
5071static inline void *
5072rb_data_object_get_warning(VALUE obj)
5073{
5074 return rb_data_object_get(obj);
5075}
5076static inline VALUE
5077rb_data_object_make(VALUE klass, RUBY_DATA_FUNC mark_func, RUBY_DATA_FUNC free_func, void **datap, size_t size)
5078{
5079 VALUE result = rb_data_object_zalloc( (klass), (size), ((void (*)(void *))(mark_func)), ((void (*)(void *))(free_func))); (*datap) = ((void *)((struct RData *)(result))->data); ((void)(*datap));
5080 return result;
5081}
5082__attribute__((__deprecated__ ("by: rb_data_object_wrap")))
5083static inline VALUE
5084rb_data_object_alloc(VALUE klass, void *data, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
5085{
5086 return rb_data_object_wrap(klass, data, dmark, dfree);
5087}
5088__attribute__((__deprecated__ ("by: rb_cObject. Will be removed in 3.1.")))
5089__attribute__((__pure__))
5090static inline VALUE
5091rb_cData(void)
5092{
5093 return rb_cObject;
5094}
5095struct rb_io_t;
5096struct RFile {
5097 struct RBasic basic;
5098 struct rb_io_t *fptr;
5099};
5100struct st_table;
5101
5102
5103size_t rb_hash_size_num(VALUE hash);
5104struct st_table *rb_hash_tbl(VALUE hash, const char *file, int line);
5105VALUE rb_hash_set_ifnone(VALUE hash, VALUE ifnone);
5106
5107
5108enum ruby_robject_flags {
5109 ROBJECT_EMBED = RUBY_FL_USER1
5110};
5111enum ruby_robject_consts {
5112 ROBJECT_EMBED_LEN_MAX = ((int)(sizeof(VALUE[3]) / (sizeof(VALUE))))
5113};
5114struct st_table;
5115struct RObject {
5116 struct RBasic basic;
5117 union {
5118 struct {
5119 uint32_t numiv;
5120 VALUE *ivptr;
5121 struct st_table *iv_index_tbl;
5122 } heap;
5124 } as;
5125};
5126__attribute__((__pure__))
5127__attribute__((__artificial__))
5128static inline uint32_t
5129ROBJECT_NUMIV(VALUE obj)
5130{
5131 ((void)0);
5132 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
5133 return ROBJECT_EMBED_LEN_MAX;
5134 }
5135 else {
5136 return ((struct RObject *)(obj))->as.heap.numiv;
5137 }
5138}
5139__attribute__((__pure__))
5140__attribute__((__artificial__))
5141static inline VALUE *
5142ROBJECT_IVPTR(VALUE obj)
5143{
5144 ((void)0);
5145 struct RObject *const ptr = ((struct RObject *)(obj));
5146 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
5147 return ptr->as.ary;
5148 }
5149 else {
5150 return ptr->as.heap.ivptr;
5151 }
5152}
5153struct re_patter_buffer;
5154struct RRegexp {
5155 struct RBasic basic;
5156 struct re_pattern_buffer *ptr;
5157 const VALUE src;
5158 unsigned long usecnt;
5159};
5160__attribute__((__pure__))
5161__attribute__((__artificial__))
5162static inline VALUE
5163RREGEXP_SRC(VALUE rexp)
5164{
5165 ((void)0);
5166 VALUE ret = ((struct RRegexp *)(rexp))->src;
5167 ((void)0);
5168 return ret;
5169}
5170__attribute__((__pure__))
5171__attribute__((__artificial__))
5172static inline char *
5173RREGEXP_SRC_PTR(VALUE rexp)
5174{
5175 return RSTRING_PTR(RREGEXP_SRC(rexp));
5176}
5177__attribute__((__pure__))
5178__attribute__((__artificial__))
5179static inline long
5180RREGEXP_SRC_LEN(VALUE rexp)
5181{
5182 return RSTRING_LEN(RREGEXP_SRC(rexp));
5183}
5184__attribute__((__pure__))
5185__attribute__((__artificial__))
5186static inline char *
5187RREGEXP_SRC_END(VALUE rexp)
5188{
5189 return RSTRING_END(RREGEXP_SRC(rexp));
5190}
5191
5192
5193VALUE rb_struct_size(VALUE st);
5194VALUE rb_struct_aref(VALUE st, VALUE k);
5195VALUE rb_struct_aset(VALUE st, VALUE k, VALUE v);
5196
5197
5198__attribute__((__artificial__))
5199static inline long
5200RSTRUCT_LEN(VALUE st)
5201{
5202 ((void)0);
5204}
5205__attribute__((__artificial__))
5206static inline VALUE
5207RSTRUCT_SET(VALUE st, int k, VALUE v)
5208{
5209 ((void)0);
5210 return rb_struct_aset(st, rb_int2num_inline(k), (v));
5211}
5212__attribute__((__artificial__))
5213static inline VALUE
5214RSTRUCT_GET(VALUE st, int k)
5215{
5216 ((void)0);
5217 return rb_struct_aref(st, rb_int2num_inline(k));
5218}
5219enum
5220
5221rbimpl_typeddata_flags {
5222 RUBY_TYPED_FREE_IMMEDIATELY = 1,
5223 RUBY_TYPED_FROZEN_SHAREABLE = RUBY_FL_SHAREABLE,
5224 RUBY_TYPED_WB_PROTECTED = RUBY_FL_WB_PROTECTED,
5225 RUBY_TYPED_PROMOTED1 = RUBY_FL_PROMOTED1
5226};
5227typedef struct rb_data_type_struct rb_data_type_t;
5228struct rb_data_type_struct {
5229 const char *wrap_struct_name;
5230 struct {
5233 size_t (*dsize)(const void *);
5235 void *reserved[1];
5236 } function;
5237 const rb_data_type_t *parent;
5238 void *data;
5239 VALUE flags;
5240};
5241struct RTypedData {
5242 struct RBasic basic;
5243 const rb_data_type_t *type;
5244 VALUE typed_flag;
5245 void *data;
5246};
5247
5248
5249__attribute__((__nonnull__ (3)))
5250VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *type);
5251VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type);
5252int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent);
5253int rb_typeddata_is_kind_of(VALUE obj, const rb_data_type_t *data_type);
5254void *rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type);
5255
5256
5257__attribute__((__pure__))
5258__attribute__((__artificial__))
5259static inline _Bool
5260rbimpl_rtypeddata_p(VALUE obj)
5261{
5262 return ((struct RTypedData *)(obj))->typed_flag == 1;
5263}
5264__attribute__((__pure__))
5265__attribute__((__artificial__))
5266static inline _Bool
5267RTYPEDDATA_P(VALUE obj)
5268{
5269 return rbimpl_rtypeddata_p(obj);
5270}
5271__attribute__((__pure__))
5272__attribute__((__artificial__))
5273static inline const struct rb_data_type_struct *
5274RTYPEDDATA_TYPE(VALUE obj)
5275{
5276 return ((struct RTypedData *)(obj))->type;
5277}
5278static inline VALUE
5279rb_data_typed_object_make(VALUE klass, const rb_data_type_t *type, void **datap, size_t size)
5280{
5281 VALUE result = rb_data_typed_object_zalloc(klass, size, type); (*datap) = ((void *)(((struct RTypedData *)(result))->data)); ((void)(*datap));
5282 return result;
5283}
5284__attribute__((__deprecated__ ("by: rb_data_typed_object_wrap")))
5285static inline VALUE
5286rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)
5287{
5288 return rb_data_typed_object_wrap(klass, datap, type);
5289}
5290
5291enum
5292{
5293 _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
5294 _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)),
5295 _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)),
5296 _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)),
5297 _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)),
5298 _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)),
5299 _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)),
5300 _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)),
5301 _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)),
5302 _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)),
5303 _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)),
5304 _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8))
5305};
5306extern const unsigned short int **__ctype_b_loc (void)
5307 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
5308extern const __int32_t **__ctype_tolower_loc (void)
5309 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
5310extern const __int32_t **__ctype_toupper_loc (void)
5311 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
5312extern int isalnum (int) __attribute__ ((__nothrow__ , __leaf__));
5313extern int isalpha (int) __attribute__ ((__nothrow__ , __leaf__));
5314extern int iscntrl (int) __attribute__ ((__nothrow__ , __leaf__));
5315extern int isdigit (int) __attribute__ ((__nothrow__ , __leaf__));
5316extern int islower (int) __attribute__ ((__nothrow__ , __leaf__));
5317extern int isgraph (int) __attribute__ ((__nothrow__ , __leaf__));
5318extern int isprint (int) __attribute__ ((__nothrow__ , __leaf__));
5319extern int ispunct (int) __attribute__ ((__nothrow__ , __leaf__));
5320extern int isspace (int) __attribute__ ((__nothrow__ , __leaf__));
5321extern int isupper (int) __attribute__ ((__nothrow__ , __leaf__));
5322extern int isxdigit (int) __attribute__ ((__nothrow__ , __leaf__));
5323extern int tolower (int __c) __attribute__ ((__nothrow__ , __leaf__));
5324extern int toupper (int __c) __attribute__ ((__nothrow__ , __leaf__));
5325extern int isblank (int) __attribute__ ((__nothrow__ , __leaf__));
5326extern int isctype (int __c, int __mask) __attribute__ ((__nothrow__ , __leaf__));
5327extern int isascii (int __c) __attribute__ ((__nothrow__ , __leaf__));
5328extern int toascii (int __c) __attribute__ ((__nothrow__ , __leaf__));
5329extern int _toupper (int) __attribute__ ((__nothrow__ , __leaf__));
5330extern int _tolower (int) __attribute__ ((__nothrow__ , __leaf__));
5331extern __inline __attribute__ ((__gnu_inline__)) int
5332__attribute__ ((__nothrow__ , __leaf__)) tolower (int __c)
5333{
5334 return __c >= -128 && __c < 256 ? (*__ctype_tolower_loc ())[__c] : __c;
5335}
5336extern __inline __attribute__ ((__gnu_inline__)) int
5337__attribute__ ((__nothrow__ , __leaf__)) toupper (int __c)
5338{
5339 return __c >= -128 && __c < 256 ? (*__ctype_toupper_loc ())[__c] : __c;
5340}
5341extern int isalnum_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
5342extern int isalpha_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
5343extern int iscntrl_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
5344extern int isdigit_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
5345extern int islower_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
5346extern int isgraph_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
5347extern int isprint_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
5348extern int ispunct_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
5349extern int isspace_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
5350extern int isupper_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
5351extern int isxdigit_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
5352extern int isblank_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
5353extern int __tolower_l (int __c, locale_t __l) __attribute__ ((__nothrow__ , __leaf__));
5354extern int tolower_l (int __c, locale_t __l) __attribute__ ((__nothrow__ , __leaf__));
5355extern int __toupper_l (int __c, locale_t __l) __attribute__ ((__nothrow__ , __leaf__));
5356extern int toupper_l (int __c, locale_t __l) __attribute__ ((__nothrow__ , __leaf__));
5357
5358
5359
5360__attribute__((__nonnull__ ()))
5361int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
5362__attribute__((__nonnull__ ()))
5363int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
5364__attribute__((__nonnull__ (1)))
5365unsigned long ruby_strtoul(const char *str, char **endptr, int base);
5366
5367
5368__attribute__((__const__))
5369
5370__attribute__((__artificial__))
5371static inline int
5372rb_isascii(int c)
5373{
5374 return '\0' <= c && c <= '\x7f';
5375}
5376__attribute__((__const__))
5377
5378__attribute__((__artificial__))
5379static inline int
5380rb_isupper(int c)
5381{
5382 return 'A' <= c && c <= 'Z';
5383}
5384__attribute__((__const__))
5385
5386__attribute__((__artificial__))
5387static inline int
5388rb_islower(int c)
5389{
5390 return 'a' <= c && c <= 'z';
5391}
5392__attribute__((__const__))
5393
5394__attribute__((__artificial__))
5395static inline int
5396rb_isalpha(int c)
5397{
5398 return rb_isupper(c) || rb_islower(c);
5399}
5400__attribute__((__const__))
5401
5402__attribute__((__artificial__))
5403static inline int
5404rb_isdigit(int c)
5405{
5406 return '0' <= c && c <= '9';
5407}
5408__attribute__((__const__))
5409
5410__attribute__((__artificial__))
5411static inline int
5412rb_isalnum(int c)
5413{
5414 return rb_isalpha(c) || rb_isdigit(c);
5415}
5416__attribute__((__const__))
5417
5418__attribute__((__artificial__))
5419static inline int
5420rb_isxdigit(int c)
5421{
5422 return rb_isdigit(c) || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f');
5423}
5424__attribute__((__const__))
5425
5426__attribute__((__artificial__))
5427static inline int
5428rb_isblank(int c)
5429{
5430 return c == ' ' || c == '\t';
5431}
5432__attribute__((__const__))
5433
5434__attribute__((__artificial__))
5435static inline int
5436rb_isspace(int c)
5437{
5438 return c == ' ' || ('\t' <= c && c <= '\r');
5439}
5440__attribute__((__const__))
5441
5442__attribute__((__artificial__))
5443static inline int
5444rb_iscntrl(int c)
5445{
5446 return ('\0' <= c && c < ' ') || c == '\x7f';
5447}
5448__attribute__((__const__))
5449
5450__attribute__((__artificial__))
5451static inline int
5452rb_isprint(int c)
5453{
5454 return ' ' <= c && c <= '\x7e';
5455}
5456__attribute__((__const__))
5457
5458__attribute__((__artificial__))
5459static inline int
5460rb_ispunct(int c)
5461{
5462 return !rb_isalnum(c);
5463}
5464__attribute__((__const__))
5465
5466__attribute__((__artificial__))
5467static inline int
5468rb_isgraph(int c)
5469{
5470 return '!' <= c && c <= '\x7e';
5471}
5472__attribute__((__const__))
5473
5474__attribute__((__artificial__))
5475static inline int
5476rb_tolower(int c)
5477{
5478 return rb_isupper(c) ? (c|0x20) : c;
5479}
5480__attribute__((__const__))
5481
5482__attribute__((__artificial__))
5483static inline int
5484rb_toupper(int c)
5485{
5486 return rb_islower(c) ? (c&0x5f) : c;
5487}
5488
5489
5490__attribute__((__nonnull__ ()))
5491VALUE rb_eval_string(const char *str);
5492__attribute__((__nonnull__ (1)))
5493VALUE rb_eval_string_protect(const char *str, int *state);
5494__attribute__((__nonnull__ (1)))
5495VALUE rb_eval_string_wrap(const char *str, int *state);
5496VALUE rb_funcall(VALUE recv, ID mid, int n, ...);
5497VALUE rb_funcallv(VALUE recv, ID mid, int argc, const VALUE *argv);
5498VALUE rb_funcallv_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
5499VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, const VALUE *argv);
5500VALUE rb_funcallv_public_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
5501VALUE rb_funcall_passing_block(VALUE recv, ID mid, int argc, const VALUE *argv);
5502VALUE rb_funcall_passing_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
5503VALUE rb_funcall_with_block(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval);
5504VALUE rb_funcall_with_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval, int kw_splat);
5505VALUE rb_call_super(int argc, const VALUE *argv);
5506VALUE rb_call_super_kw(int argc, const VALUE *argv, int kw_splat);
5507VALUE rb_current_receiver(void);
5508__attribute__((__nonnull__ (2)))
5509int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values);
5510__attribute__((__nonnull__ ()))
5511VALUE rb_extract_keywords(VALUE *orighash);
5512
5513
5514typedef uint32_t rb_event_flag_t;
5515typedef void (*rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass);
5516
5517
5518void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data);
5520
5521
5522
5523
5524void rb_gc_register_address(VALUE *valptr);
5525void rb_global_variable(VALUE *);
5526void rb_gc_unregister_address(VALUE *valptr);
5527void rb_gc_register_mark_object(VALUE object);
5528
5529
5530
5531
5532typedef int ruby_glob_func(const char *path, VALUE arg, void *enc);
5533__attribute__((__nonnull__ ()))
5534void rb_glob(const char *pattern, void (*func)(const char *path, VALUE arg, void *enc), VALUE arg);
5535__attribute__((__nonnull__ ()))
5536int ruby_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);
5537__attribute__((__nonnull__ ()))
5538int ruby_brace_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);
5539
5540
5541
5542
5543extern VALUE rb_mKernel;
5544extern VALUE rb_mComparable;
5545extern VALUE rb_mEnumerable;
5546extern VALUE rb_mErrno;
5547extern VALUE rb_mFileTest;
5548extern VALUE rb_mGC;
5549extern VALUE rb_mMath;
5550extern VALUE rb_mProcess;
5551extern VALUE rb_mWaitReadable;
5552extern VALUE rb_mWaitWritable;
5553extern VALUE rb_cBasicObject;
5554extern VALUE rb_cObject;
5555extern VALUE rb_cArray;
5556extern VALUE rb_cBinding;
5557extern VALUE rb_cClass;
5558extern VALUE rb_cDir;
5559extern VALUE rb_cEncoding;
5560extern VALUE rb_cEnumerator;
5561extern VALUE rb_cFalseClass;
5562extern VALUE rb_cFile;
5563extern VALUE rb_cComplex;
5564extern VALUE rb_cFloat;
5565extern VALUE rb_cHash;
5566extern VALUE rb_cIO;
5567extern VALUE rb_cInteger;
5568extern VALUE rb_cMatch;
5569extern VALUE rb_cMethod;
5570extern VALUE rb_cModule;
5571extern VALUE rb_cRefinement;
5572extern VALUE rb_cNameErrorMesg;
5573extern VALUE rb_cNilClass;
5574extern VALUE rb_cNumeric;
5575extern VALUE rb_cProc;
5576extern VALUE rb_cRandom;
5577extern VALUE rb_cRange;
5578extern VALUE rb_cRational;
5579extern VALUE rb_cRegexp;
5580extern VALUE rb_cStat;
5581extern VALUE rb_cString;
5582extern VALUE rb_cStruct;
5583extern VALUE rb_cSymbol;
5584extern VALUE rb_cThread;
5585extern VALUE rb_cTime;
5586extern VALUE rb_cTrueClass;
5587extern VALUE rb_cUnboundMethod;
5588extern VALUE rb_eException;
5589extern VALUE rb_eStandardError;
5590extern VALUE rb_eSystemExit;
5591extern VALUE rb_eInterrupt;
5592extern VALUE rb_eSignal;
5593extern VALUE rb_eFatal;
5594extern VALUE rb_eArgError;
5595extern VALUE rb_eEOFError;
5596extern VALUE rb_eIndexError;
5597extern VALUE rb_eStopIteration;
5598extern VALUE rb_eKeyError;
5599extern VALUE rb_eRangeError;
5600extern VALUE rb_eIOError;
5601extern VALUE rb_eRuntimeError;
5602extern VALUE rb_eFrozenError;
5603extern VALUE rb_eSecurityError;
5604extern VALUE rb_eSystemCallError;
5605extern VALUE rb_eThreadError;
5606extern VALUE rb_eTypeError;
5607extern VALUE rb_eZeroDivError;
5608extern VALUE rb_eNotImpError;
5609extern VALUE rb_eNoMemError;
5610extern VALUE rb_eNoMethodError;
5611extern VALUE rb_eFloatDomainError;
5612extern VALUE rb_eLocalJumpError;
5613extern VALUE rb_eSysStackError;
5614extern VALUE rb_eRegexpError;
5615extern VALUE rb_eEncodingError;
5616extern VALUE rb_eEncCompatError;
5617extern VALUE rb_eNoMatchingPatternError;
5618extern VALUE rb_eNoMatchingPatternKeyError;
5619extern VALUE rb_eScriptError;
5620extern VALUE rb_eNameError;
5621extern VALUE rb_eSyntaxError;
5622extern VALUE rb_eLoadError;
5623extern VALUE rb_eMathDomainError;
5624extern VALUE rb_stdin;
5625extern VALUE rb_stdout;
5626extern VALUE rb_stderr;
5627__attribute__((__pure__))
5628static inline VALUE
5629rb_class_of(VALUE obj)
5630{
5631 if (! RB_SPECIAL_CONST_P(obj)) {
5632 return RBASIC_CLASS(obj);
5633 }
5634 else if (obj == ((VALUE)RUBY_Qfalse)) {
5635 return rb_cFalseClass;
5636 }
5637 else if (obj == ((VALUE)RUBY_Qnil)) {
5638 return rb_cNilClass;
5639 }
5640 else if (obj == ((VALUE)RUBY_Qtrue)) {
5641 return rb_cTrueClass;
5642 }
5643 else if (RB_FIXNUM_P(obj)) {
5644 return rb_cInteger;
5645 }
5646 else if (RB_STATIC_SYM_P(obj)) {
5647 return rb_cSymbol;
5648 }
5649 else if (RB_FLONUM_P(obj)) {
5650 return rb_cFloat;
5651 }
5652 __builtin_unreachable();
5653}
5654
5655
5656
5657
5658__attribute__((__nonnull__ ()))
5659void ruby_sysinit(int *argc, char ***argv);
5660void ruby_init(void);
5661void* ruby_options(int argc, char** argv);
5662int ruby_executable_node(void *n, int *status);
5663int ruby_run_node(void *n);
5664void ruby_show_version(void);
5665void ruby_show_copyright(void);
5666void ruby_init_stack(volatile VALUE *addr);
5667int ruby_setup(void);
5668int ruby_cleanup(int ex);
5669void ruby_finalize(void);
5670__attribute__((__noreturn__))
5671void ruby_stop(int);
5672int ruby_stack_check(void);
5673size_t ruby_stack_length(VALUE **topnotch);
5674int ruby_exec_node(void *n);
5675void ruby_script(const char* name);
5676void ruby_set_script_name(VALUE name);
5677void ruby_prog_init(void);
5678void ruby_set_argv(int argc, char **argv);
5679void *ruby_process_options(int argc, char **argv);
5680void ruby_init_loadpath(void);
5681void ruby_incpush(const char *path);
5682void ruby_sig_finalize(void);
5683
5684
5685
5686
5687typedef VALUE rb_block_call_func(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg);
5688typedef rb_block_call_func *rb_block_call_func_t;
5689VALUE rb_each(VALUE obj);
5690VALUE rb_yield(VALUE val);
5691VALUE rb_yield_values(int n, ...);
5692VALUE rb_yield_values2(int n, const VALUE *argv);
5693VALUE rb_yield_values_kw(int n, const VALUE *argv, int kw_splat);
5694VALUE rb_yield_splat(VALUE ary);
5695VALUE rb_yield_splat_kw(VALUE ary, int kw_splat);
5696VALUE rb_yield_block(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg);
5697int rb_keyword_given_p(void);
5698int rb_block_given_p(void);
5699void rb_need_block(void);
5700__attribute__((__deprecated__ ("by: rb_block_call since 1.9")))
5701VALUE rb_iterate(VALUE (*func1)(VALUE), VALUE data1, rb_block_call_func_t proc, VALUE data2);
5702VALUE rb_block_call(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2);
5703VALUE rb_block_call_kw(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2, int kw_splat);
5704VALUE rb_rescue(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2);
5705VALUE rb_rescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, ...);
5706VALUE rb_vrescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, va_list ap);
5707VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*e_proc)(VALUE), VALUE data2);
5708VALUE rb_catch(const char *tag, rb_block_call_func_t func, VALUE data);
5709VALUE rb_catch_obj(VALUE tag, rb_block_call_func_t func, VALUE data);
5710__attribute__((__noreturn__))
5711void rb_throw(const char *tag, VALUE val);
5712__attribute__((__noreturn__))
5713void rb_throw_obj(VALUE tag, VALUE val);
5714
5715
5717 _Bool left;
5718 size_t right;
5719};
5720
5721
5722__attribute__((__malloc__))
5723__attribute__((__returns_nonnull__))
5724__attribute__((__alloc_size__ (2)))
5725__attribute__((__nonnull__ ()))
5726void *rb_alloc_tmp_buffer(volatile VALUE *store, long len);
5727__attribute__((__malloc__))
5728__attribute__((__returns_nonnull__))
5729__attribute__((__alloc_size__ (2,3)))
5730__attribute__((__nonnull__ ()))
5731void *rb_alloc_tmp_buffer_with_count(volatile VALUE *store, size_t len,size_t count);
5732void rb_free_tmp_buffer(volatile VALUE *store);
5733__attribute__((__noreturn__))
5734void ruby_malloc_size_overflow(size_t x, size_t y);
5735
5736
5737static inline int
5738rb_mul_size_overflow(size_t a, size_t b, size_t max, size_t *c)
5739{
5740 __extension__ unsigned __int128 da, db, c2;
5741 da = a;
5742 db = b;
5743 c2 = da * db;
5744 if (c2 > max) return 1;
5745 *c = ((size_t)c2);
5746 return 0;
5747}
5748
5749__attribute__((__const__))
5750static inline struct rbimpl_size_mul_overflow_tag
5751rbimpl_size_mul_overflow(size_t x, size_t y)
5752{
5753 struct rbimpl_size_mul_overflow_tag ret = { 0, 0, };
5754 ret.left = __builtin_mul_overflow(x, y, &ret.right);
5755 return ret;
5756}
5757static inline size_t
5758rbimpl_size_mul_or_raise(size_t x, size_t y)
5759{
5760 struct rbimpl_size_mul_overflow_tag size =
5761 rbimpl_size_mul_overflow(x, y);
5762 if ((__builtin_expect(!!(! size.left), 1))) {
5763 return size.right;
5764 }
5765 else {
5766 ruby_malloc_size_overflow(x, y);
5767 __builtin_unreachable();
5768 }
5769}
5770static inline void *
5771rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize)
5772{
5773 const size_t total_size = rbimpl_size_mul_or_raise(count, elsize);
5774 const size_t cnt = (total_size + sizeof(VALUE) - 1) / sizeof(VALUE);
5775 return rb_alloc_tmp_buffer_with_count(store, total_size, cnt);
5776}
5777
5778
5779
5780__attribute__((__nonnull__ (1)))
5781__attribute__((__returns_nonnull__))
5782static inline void *
5783ruby_nonempty_memcpy(void *dest, const void *src, size_t n)
5784{
5785 if (n) {
5786 return memcpy(dest, src, n);
5787 }
5788 else {
5789 return dest;
5790 }
5791}
5792
5793
5794
5795
5796__attribute__((__nonnull__ ()))
5797VALUE rb_define_class(const char *name, VALUE super);
5798__attribute__((__nonnull__ ()))
5799VALUE rb_define_module(const char *name);
5800__attribute__((__nonnull__ ()))
5801VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super);
5802__attribute__((__nonnull__ ()))
5803VALUE rb_define_module_under(VALUE outer, const char *name);
5804void rb_include_module(VALUE klass, VALUE module);
5805void rb_extend_object(VALUE obj, VALUE mod);
5806void rb_prepend_module(VALUE klass, VALUE module);
5807
5808
5809
5810
5811VALUE rb_newobj(void);
5812VALUE rb_newobj_of(VALUE klass, VALUE flags);
5813VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type);
5814VALUE rb_obj_class(VALUE obj);
5815VALUE rb_singleton_class_clone(VALUE obj);
5816void rb_singleton_class_attached(VALUE klass, VALUE obj);
5817void rb_copy_generic_ivar(VALUE clone, VALUE obj);
5818
5819
5820__attribute__((__deprecated__ ("This is no longer how Object#clone works.")))
5821static inline void
5822rb_clone_setup(VALUE clone, VALUE obj)
5823{
5824 return;
5825}
5826__attribute__((__deprecated__ ("This is no longer how Object#dup works.")))
5827static inline void
5828rb_dup_setup(VALUE dup, VALUE obj)
5829{
5830 return;
5831}
5832
5833
5834__attribute__((__nonnull__ ()))
5835
5836void rb_mem_clear(VALUE *buf, long len)
5837
5838 ;
5839VALUE rb_assoc_new(VALUE car, VALUE cdr);
5840VALUE rb_check_array_type(VALUE obj);
5841VALUE rb_ary_new(void);
5842VALUE rb_ary_new_capa(long capa);
5843VALUE rb_ary_new_from_args(long n, ...);
5844VALUE rb_ary_new_from_values(long n, const VALUE *elts);
5845VALUE rb_ary_tmp_new(long capa);
5846void rb_ary_free(VALUE ary);
5847void rb_ary_modify(VALUE ary);
5848VALUE rb_ary_freeze(VALUE obj);
5849__attribute__((__pure__))
5850VALUE rb_ary_shared_with_p(VALUE lhs, VALUE rhs);
5851VALUE rb_ary_aref(int argc, const VALUE *argv, VALUE ary);
5852VALUE rb_ary_subseq(VALUE ary, long beg, long len);
5853void rb_ary_store(VALUE ary, long key, VALUE val);
5854VALUE rb_ary_dup(VALUE ary);
5855VALUE rb_ary_resurrect(VALUE ary);
5856VALUE rb_ary_to_ary(VALUE obj);
5857VALUE rb_ary_to_s(VALUE ary);
5858VALUE rb_ary_cat(VALUE ary, const VALUE *train, long len);
5859VALUE rb_ary_push(VALUE ary, VALUE elem);
5860VALUE rb_ary_pop(VALUE ary);
5861VALUE rb_ary_shift(VALUE ary);
5862VALUE rb_ary_unshift(VALUE ary, VALUE elem);
5863__attribute__((__pure__))
5864VALUE rb_ary_entry(VALUE ary, long off);
5865VALUE rb_ary_each(VALUE ary);
5866VALUE rb_ary_join(VALUE ary, VALUE sep);
5867VALUE rb_ary_reverse(VALUE ary);
5868VALUE rb_ary_rotate(VALUE ary, long rot);
5869VALUE rb_ary_sort(VALUE ary);
5870VALUE rb_ary_sort_bang(VALUE ary);
5871VALUE rb_ary_delete(VALUE ary, VALUE elem);
5872VALUE rb_ary_delete_at(VALUE ary, long pos);
5873VALUE rb_ary_clear(VALUE ary);
5874VALUE rb_ary_plus(VALUE lhs, VALUE rhs);
5875VALUE rb_ary_concat(VALUE lhs, VALUE rhs);
5876VALUE rb_ary_assoc(VALUE alist, VALUE key);
5877VALUE rb_ary_rassoc(VALUE alist, VALUE key);
5878VALUE rb_ary_includes(VALUE ary, VALUE elem);
5879VALUE rb_ary_cmp(VALUE lhs, VALUE rhs);
5880VALUE rb_ary_replace(VALUE copy, VALUE orig);
5881VALUE rb_get_values_at(VALUE obj, long olen, int argc, const VALUE *argv, VALUE (*func)(VALUE obj, long oidx));
5882VALUE rb_ary_resize(VALUE ary, long len);
5883
5884
5885
5886
5887VALUE rb_exc_new(VALUE etype, const char *ptr, long len);
5888__attribute__((__nonnull__ ()))
5889VALUE rb_exc_new_cstr(VALUE etype, const char *str);
5890VALUE rb_exc_new_str(VALUE etype, VALUE str);
5891__attribute__((__noreturn__))
5892__attribute__((__nonnull__ (1)))
5893__attribute__((__format__(__printf__, 1, 2)))
5894void rb_loaderror(const char *fmt, ...);
5895__attribute__((__noreturn__))
5896__attribute__((__nonnull__ (2)))
5897__attribute__((__format__(__printf__, 2, 3)))
5898void rb_loaderror_with_path(VALUE path, const char *fmt, ...);
5899__attribute__((__noreturn__))
5900__attribute__((__nonnull__ (2)))
5901__attribute__((__format__(__printf__, 2, 3)))
5902void rb_name_error(ID name, const char *fmt, ...);
5903__attribute__((__noreturn__))
5904__attribute__((__nonnull__ (2)))
5905__attribute__((__format__(__printf__, 2, 3)))
5906void rb_name_error_str(VALUE name, const char *fmt, ...);
5907__attribute__((__noreturn__))
5908__attribute__((__nonnull__ (2)))
5909__attribute__((__format__(__printf__, 2, 3)))
5910void rb_frozen_error_raise(VALUE recv, const char *fmt, ...);
5911__attribute__((__noreturn__))
5912__attribute__((__nonnull__ ()))
5913void rb_invalid_str(const char *str, const char *type);
5914__attribute__((__noreturn__))
5915__attribute__((__nonnull__ ()))
5916void rb_error_frozen(const char *what);
5917__attribute__((__noreturn__))
5918void rb_error_frozen_object(VALUE what);
5919void rb_error_untrusted(VALUE);
5920void rb_check_frozen(VALUE obj);
5921void rb_check_trusted(VALUE);
5922void rb_check_copyable(VALUE obj, VALUE orig);
5923__attribute__((__noreturn__))
5924static void rb_error_arity(int argc, int min, int max);
5925
5926
5927static inline void
5928rb_check_frozen_inline(VALUE obj)
5929{
5930 if ((__builtin_expect(!!(RB_OBJ_FROZEN(obj)), 0))) {
5931 rb_error_frozen_object(obj);
5932 }
5933}
5934static inline int
5935rb_check_arity(int argc, int min, int max)
5936{
5937 if ((argc < min) || (max != (-1) && argc > max))
5938 rb_error_arity(argc, min, max);
5939 return argc;
5940}
5941
5942
5943__attribute__((__nonnull__ ()))
5944void rb_st_foreach_safe(struct st_table *st, st_foreach_callback_func *func, st_data_t arg);
5945VALUE rb_check_hash_type(VALUE obj);
5946__attribute__((__nonnull__ ()))
5947void rb_hash_foreach(VALUE hash, int (*func)(VALUE key, VALUE val, VALUE arg), VALUE arg);
5948VALUE rb_hash(VALUE obj);
5949VALUE rb_hash_new(void);
5950VALUE rb_hash_dup(VALUE hash);
5951VALUE rb_hash_freeze(VALUE obj);
5952VALUE rb_hash_aref(VALUE hash, VALUE key);
5953VALUE rb_hash_lookup(VALUE hash, VALUE key);
5954VALUE rb_hash_lookup2(VALUE hash, VALUE key, VALUE def);
5955VALUE rb_hash_fetch(VALUE hash, VALUE key);
5956VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val);
5957VALUE rb_hash_clear(VALUE hash);
5958VALUE rb_hash_delete_if(VALUE hash);
5959VALUE rb_hash_delete(VALUE hash, VALUE key);
5960void rb_hash_bulk_insert(long argc, const VALUE *argv, VALUE hash);
5961typedef VALUE rb_hash_update_func(VALUE newkey, VALUE oldkey, VALUE value);
5962VALUE rb_hash_update_by(VALUE hash1, VALUE hash2, rb_hash_update_func *func);
5963int rb_path_check(const char *path);
5964int rb_env_path_tainted(void);
5965VALUE rb_env_clear(void);
5966VALUE rb_hash_size(VALUE hash);
5967
5968
5969
5970
5971VALUE rb_block_proc(void);
5972VALUE rb_block_lambda(void);
5973VALUE rb_proc_new(rb_block_call_func_t func, VALUE callback_arg);
5974VALUE rb_obj_is_proc(VALUE recv);
5975VALUE rb_proc_call(VALUE recv, VALUE args);
5976VALUE rb_proc_call_kw(VALUE recv, VALUE args, int kw_splat);
5977VALUE rb_proc_call_with_block(VALUE recv, int argc, const VALUE *argv, VALUE proc);
5978VALUE rb_proc_call_with_block_kw(VALUE recv, int argc, const VALUE *argv, VALUE proc, int kw_splat);
5979int rb_proc_arity(VALUE recv);
5980VALUE rb_proc_lambda_p(VALUE recv);
5981VALUE rb_binding_new(void);
5982VALUE rb_obj_method(VALUE recv, VALUE mid);
5983VALUE rb_obj_is_method(VALUE recv);
5984VALUE rb_method_call(int argc, const VALUE *argv, VALUE recv);
5985VALUE rb_method_call_kw(int argc, const VALUE *argv, VALUE recv, int kw_splat);
5986VALUE rb_method_call_with_block(int argc, const VALUE *argv, VALUE recv, VALUE proc);
5987VALUE rb_method_call_with_block_kw(int argc, const VALUE *argv, VALUE recv, VALUE proc, int kw_splat);
5988int rb_mod_method_arity(VALUE mod, ID mid);
5989int rb_obj_method_arity(VALUE obj, ID mid);
5990__attribute__((__nonnull__ (1)))
5991VALUE rb_protect(VALUE (*func)(VALUE args), VALUE args, int *state);
5992
5993
5994
5995
5996__attribute__((__nonnull__ (2, 3)))
5997int rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...);
5998__attribute__((__nonnull__ (3, 4)))
5999int rb_scan_args_kw(int kw_splat, int argc, const VALUE *argv, const char *fmt, ...);
6000__attribute__((__error__ ("bad scan arg format")))
6001void rb_scan_args_bad_format(const char*);
6002__attribute__((__error__ ("variable argument length doesn't match")))
6003void rb_scan_args_length_mismatch(const char*,int);
6004
6005
6006static inline _Bool
6007rb_scan_args_keyword_p(int kw_flag, VALUE last)
6008{
6009 switch (kw_flag) {
6010 case 0:
6011 return !! rb_keyword_given_p();
6012 case 1:
6013 return 1;
6014 case 3:
6015 return RB_TYPE_P(last, RUBY_T_HASH);
6016 default:
6017 return 0;
6018 }
6019}
6020__attribute__((__always_inline__)) inline
6021static _Bool
6022rb_scan_args_lead_p(const char *fmt)
6023{
6024 return (((unsigned char)((fmt[0])-'0'))<10);
6025}
6026__attribute__((__always_inline__)) inline
6027static int
6028rb_scan_args_n_lead(const char *fmt)
6029{
6030 return (rb_scan_args_lead_p(fmt) ? fmt[0]-'0' : 0);
6031}
6032__attribute__((__always_inline__)) inline
6033static _Bool
6034rb_scan_args_opt_p(const char *fmt)
6035{
6036 return (rb_scan_args_lead_p(fmt) && (((unsigned char)((fmt[1])-'0'))<10));
6037}
6038__attribute__((__always_inline__)) inline
6039static int
6040rb_scan_args_n_opt(const char *fmt)
6041{
6042 return (rb_scan_args_opt_p(fmt) ? fmt[1]-'0' : 0);
6043}
6044__attribute__((__always_inline__)) inline
6045static int
6046rb_scan_args_var_idx(const char *fmt)
6047{
6048 return (!rb_scan_args_lead_p(fmt) ? 0 : !(((unsigned char)((fmt[1])-'0'))<10) ? 1 : 2);
6049}
6050__attribute__((__always_inline__)) inline
6051static _Bool
6052rb_scan_args_f_var(const char *fmt)
6053{
6054 return (fmt[rb_scan_args_var_idx(fmt)]=='*');
6055}
6056__attribute__((__always_inline__)) inline
6057static int
6058rb_scan_args_trail_idx(const char *fmt)
6059{
6060 const int idx = rb_scan_args_var_idx(fmt);
6061 return idx+(fmt[idx]=='*');
6062}
6063__attribute__((__always_inline__)) inline
6064static int
6065rb_scan_args_n_trail(const char *fmt)
6066{
6067 const int idx = rb_scan_args_trail_idx(fmt);
6068 return ((((unsigned char)((fmt[idx])-'0'))<10) ? fmt[idx]-'0' : 0);
6069}
6070__attribute__((__always_inline__)) inline
6071static int
6072rb_scan_args_hash_idx(const char *fmt)
6073{
6074 const int idx = rb_scan_args_trail_idx(fmt);
6075 return idx+(((unsigned char)((fmt[idx])-'0'))<10);
6076}
6077__attribute__((__always_inline__)) inline
6078static _Bool
6079rb_scan_args_f_hash(const char *fmt)
6080{
6081 return (fmt[rb_scan_args_hash_idx(fmt)]==':');
6082}
6083__attribute__((__always_inline__)) inline
6084static int
6085rb_scan_args_block_idx(const char *fmt)
6086{
6087 const int idx = rb_scan_args_hash_idx(fmt);
6088 return idx+(fmt[idx]==':');
6089}
6090__attribute__((__always_inline__)) inline
6091static _Bool
6092rb_scan_args_f_block(const char *fmt)
6093{
6094 return (fmt[rb_scan_args_block_idx(fmt)]=='&');
6095}
6096__attribute__((__always_inline__)) inline
6097static int
6098rb_scan_args_set(int kw_flag, int argc, const VALUE *argv,
6099 int n_lead, int n_opt, int n_trail,
6100 _Bool f_var, _Bool f_hash, _Bool f_block,
6101 VALUE *vars[], const char *fmt [[maybe_unused]], int varc [[maybe_unused]])
6102
6103
6104{
6105 int i, argi = 0, vari = 0;
6106 VALUE *var, hash = ((VALUE)RUBY_Qnil);
6107 const int n_mand = n_lead + n_trail;
6108 if (f_hash && argc > 0) {
6109 VALUE last = argv[argc - 1];
6110 if (rb_scan_args_keyword_p(kw_flag, last)) {
6111 hash = rb_hash_dup(last);
6112 argc--;
6113 }
6114 }
6115 if (argc < n_mand) {
6116 goto argc_error;
6117 }
6118 for (i = 0; i < n_lead; i++) {
6119 var = vars[vari++];
6120 if (var) *var = argv[argi];
6121 argi++;
6122 }
6123 for (i = 0; i < n_opt; i++) {
6124 var = vars[vari++];
6125 if (argi < argc - n_trail) {
6126 if (var) *var = argv[argi];
6127 argi++;
6128 }
6129 else {
6130 if (var) *var = ((VALUE)RUBY_Qnil);
6131 }
6132 }
6133 if (f_var) {
6134 int n_var = argc - argi - n_trail;
6135 var = vars[vari++];
6136 if (0 < n_var) {
6137 if (var) *var = rb_ary_new_from_values(n_var, &argv[argi]);
6138 argi += n_var;
6139 }
6140 else {
6141 if (var) *var = rb_ary_new();
6142 }
6143 }
6144 for (i = 0; i < n_trail; i++) {
6145 var = vars[vari++];
6146 if (var) *var = argv[argi];
6147 argi++;
6148 }
6149 if (f_hash) {
6150 var = vars[vari++];
6151 if (var) *var = hash;
6152 }
6153 if (f_block) {
6154 var = vars[vari++];
6155 if (rb_block_given_p()) {
6156 *var = rb_block_proc();
6157 }
6158 else {
6159 *var = ((VALUE)RUBY_Qnil);
6160 }
6161 }
6162 if (argi == argc) {
6163 return argc;
6164 }
6165 argc_error:
6166 rb_error_arity(argc, n_mand, f_var ? (-1) : n_mand + n_opt);
6167 __builtin_unreachable();
6168}
6169
6170
6171ID rb_sym2id(VALUE obj);
6172VALUE rb_id2sym(ID id);
6173__attribute__((__nonnull__ ()))
6174ID rb_intern(const char *name);
6175ID rb_intern2(const char *name, long len);
6176ID rb_intern_str(VALUE str);
6177const char *rb_id2name(ID id);
6178__attribute__((__nonnull__ ()))
6179ID rb_check_id(volatile VALUE *namep);
6180ID rb_to_id(VALUE str);
6181VALUE rb_id2str(ID id);
6182VALUE rb_sym2str(VALUE id);
6183VALUE rb_to_symbol(VALUE name);
6184__attribute__((__nonnull__ ()))
6185VALUE rb_check_symbol(volatile VALUE *namep);
6186
6187
6188__attribute__((__pure__))
6189__attribute__((__nonnull__ ()))
6190static inline ID
6191rb_intern_const(const char *str)
6192{
6193 size_t len = strlen(str);
6194 return rb_intern2(str, ((long)len));
6195}
6196
6197__attribute__((__nonnull__ ()))
6198static inline ID
6199rbimpl_intern_const(ID *ptr, const char *str)
6200{
6201 while (! *ptr) {
6202 *ptr = rb_intern_const(str);
6203 }
6204 return *ptr;
6205}
6206
6207
6208typedef VALUE rb_gvar_getter_t(ID id, VALUE *data);
6209typedef void rb_gvar_setter_t(VALUE val, ID id, VALUE *data);
6210typedef void rb_gvar_marker_t(VALUE *var);
6211rb_gvar_getter_t rb_gvar_undef_getter;
6212rb_gvar_setter_t rb_gvar_undef_setter;
6213rb_gvar_marker_t rb_gvar_undef_marker;
6214rb_gvar_getter_t rb_gvar_val_getter;
6215rb_gvar_setter_t rb_gvar_val_setter;
6216rb_gvar_marker_t rb_gvar_val_marker;
6217rb_gvar_getter_t rb_gvar_var_getter;
6218rb_gvar_setter_t rb_gvar_var_setter;
6219rb_gvar_marker_t rb_gvar_var_marker;
6220__attribute__((__noreturn__))
6221rb_gvar_setter_t rb_gvar_readonly_setter;
6222__attribute__((__nonnull__ ()))
6223void rb_define_variable(const char *name, VALUE *var);
6224__attribute__((__nonnull__ (1)))
6225void rb_define_virtual_variable(const char *name, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);
6226__attribute__((__nonnull__ (1)))
6227void rb_define_hooked_variable(const char *name, VALUE *var, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);
6228__attribute__((__nonnull__ ()))
6229void rb_define_readonly_variable(const char *name, const VALUE *var);
6230__attribute__((__nonnull__ ()))
6231void rb_define_const(VALUE klass, const char *name, VALUE val);
6232__attribute__((__nonnull__ ()))
6233void rb_define_global_const(const char *name, VALUE val);
6234__attribute__((__nonnull__ ()))
6235void rb_deprecate_constant(VALUE mod, const char *name);
6236__attribute__((__nonnull__ ()))
6237VALUE rb_gv_set(const char *name, VALUE val);
6238__attribute__((__nonnull__ ()))
6239VALUE rb_gv_get(const char *name);
6240__attribute__((__nonnull__ ()))
6241VALUE rb_iv_get(VALUE obj, const char *name);
6242__attribute__((__nonnull__ ()))
6243VALUE rb_iv_set(VALUE obj, const char *name, VALUE val);
6244
6245
6246
6247
6248VALUE rb_get_path(VALUE obj);
6249VALUE rb_get_path_no_checksafe(VALUE);
6250__attribute__((__error__ (" argument length doesn't match"))) int rb_varargs_bad_length(int,int);
6251const char *rb_class2name(VALUE klass);
6252const char *rb_obj_classname(VALUE obj);
6253void rb_p(VALUE obj);
6254VALUE rb_equal(VALUE lhs, VALUE rhs);
6255VALUE rb_require(const char *feature);
6256
6257
6258VALUE rb_big_new(size_t len, int sign);
6259int rb_bigzero_p(VALUE x);
6260VALUE rb_big_clone(VALUE num);
6261void rb_big_2comp(VALUE num);
6262VALUE rb_big_norm(VALUE x);
6263void rb_big_resize(VALUE big, size_t len);
6264__attribute__((__nonnull__ ()))
6265VALUE rb_cstr_to_inum(const char *str, int base, int badcheck);
6266VALUE rb_str_to_inum(VALUE str, int base, int badcheck);
6267__attribute__((__nonnull__ ()))
6268VALUE rb_cstr2inum(const char *str, int base);
6269VALUE rb_str2inum(VALUE str, int base);
6270VALUE rb_big2str(VALUE x, int base);
6271long rb_big2long(VALUE x);
6272unsigned long rb_big2ulong(VALUE x);
6273long long rb_big2ll(VALUE);
6274unsigned long long rb_big2ull(VALUE);
6275__attribute__((__nonnull__ ()))
6276void rb_big_pack(VALUE val, unsigned long *buf, long num_longs);
6277__attribute__((__nonnull__ ()))
6278VALUE rb_big_unpack(unsigned long *buf, long num_longs);
6279__attribute__((__nonnull__ ()))
6280int rb_uv_to_utf8(char buf[6], unsigned long uv);
6281VALUE rb_dbl2big(double d);
6282double rb_big2dbl(VALUE x);
6283VALUE rb_big_cmp(VALUE lhs, VALUE rhs);
6284VALUE rb_big_eq(VALUE lhs, VALUE rhs);
6285VALUE rb_big_eql(VALUE lhs, VALUE rhs);
6286VALUE rb_big_plus(VALUE x, VALUE y);
6287VALUE rb_big_minus(VALUE x, VALUE y);
6288VALUE rb_big_mul(VALUE x, VALUE y);
6289VALUE rb_big_div(VALUE x, VALUE y);
6290VALUE rb_big_idiv(VALUE x, VALUE y);
6291VALUE rb_big_modulo(VALUE x, VALUE y);
6292VALUE rb_big_divmod(VALUE x, VALUE y);
6293VALUE rb_big_pow(VALUE x, VALUE y);
6294VALUE rb_big_and(VALUE x, VALUE y);
6295VALUE rb_big_or(VALUE x, VALUE y);
6296VALUE rb_big_xor(VALUE x, VALUE y);
6297VALUE rb_big_lshift(VALUE x, VALUE y);
6298VALUE rb_big_rshift(VALUE x, VALUE y);
6299__attribute__((__nonnull__ ()))
6300int rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags);
6301__attribute__((__nonnull__ ()))
6302VALUE rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags);
6303size_t rb_absint_size(VALUE val, int *nlz_bits_ret);
6304size_t rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret);
6305int rb_absint_singlebit_p(VALUE val);
6306
6307
6308
6309
6310int rb_cmpint(VALUE val, VALUE a, VALUE b);
6311__attribute__((__cold__))
6312__attribute__((__noreturn__))
6313void rb_cmperr(VALUE a, VALUE b);
6314
6315
6316
6317
6318VALUE rb_complex_raw(VALUE real, VALUE imag);
6319VALUE rb_complex_new(VALUE real, VALUE imag);
6320VALUE rb_complex_new_polar(VALUE abs, VALUE arg);
6321__attribute__((__deprecated__ ("by: rb_complex_new_polar")))
6322VALUE rb_complex_polar(VALUE abs, VALUE arg);
6323__attribute__((__pure__))
6324VALUE rb_complex_real(VALUE z);
6325__attribute__((__pure__))
6326VALUE rb_complex_imag(VALUE z);
6327VALUE rb_complex_plus(VALUE x, VALUE y);
6328VALUE rb_complex_minus(VALUE x, VALUE y);
6329VALUE rb_complex_mul(VALUE x, VALUE y);
6330VALUE rb_complex_div(VALUE x, VALUE y);
6331VALUE rb_complex_uminus(VALUE z);
6332VALUE rb_complex_conjugate(VALUE z);
6333VALUE rb_complex_abs(VALUE z);
6334VALUE rb_complex_arg(VALUE z);
6335VALUE rb_complex_pow(VALUE base, VALUE exp);
6336VALUE rb_dbl_complex_new(double real, double imag);
6337VALUE rb_Complex(VALUE real, VALUE imag);
6338
6339
6340
6341
6342VALUE rb_fiber_new(rb_block_call_func_t func, VALUE callback_obj);
6343VALUE rb_fiber_current(void);
6344VALUE rb_fiber_alive_p(VALUE fiber);
6345VALUE rb_obj_is_fiber(VALUE obj);
6346VALUE rb_fiber_resume(VALUE fiber, int argc, const VALUE *argv);
6347VALUE rb_fiber_resume_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);
6348VALUE rb_fiber_yield(int argc, const VALUE *argv);
6349VALUE rb_fiber_yield_kw(int argc, const VALUE *argv, int kw_splat);
6350VALUE rb_fiber_transfer(VALUE fiber, int argc, const VALUE *argv);
6351VALUE rb_fiber_transfer_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);
6352VALUE rb_fiber_raise(VALUE fiber, int argc, const VALUE *argv);
6353
6354
6355
6356
6357VALUE rb_dir_getwd(void);
6358
6359
6360
6361
6362VALUE rb_enum_values_pack(int argc, const VALUE *argv);
6363
6364
6365
6366
6367__attribute__((__noreturn__))
6368void rb_exc_raise(VALUE exc);
6369__attribute__((__noreturn__))
6370void rb_exc_fatal(VALUE exc);
6371__attribute__((__noreturn__))
6372VALUE rb_f_exit(int argc, const VALUE *argv);
6373__attribute__((__noreturn__))
6374VALUE rb_f_abort(int argc, const VALUE *argv);
6375__attribute__((__noreturn__))
6376void rb_interrupt(void);
6377ID rb_frame_this_func(void);
6378__attribute__((__noreturn__))
6379void rb_jump_tag(int state);
6380void rb_obj_call_init(VALUE obj, int argc, const VALUE *argv);
6381void rb_obj_call_init_kw(VALUE, int, const VALUE*, int);
6382ID rb_frame_callee(void);
6383VALUE rb_make_exception(int argc, const VALUE *argv);
6384void rb_set_end_proc(void (*func)(VALUE arg), VALUE arg);
6385
6386
6387
6388
6389typedef VALUE rb_enumerator_size_func(VALUE recv, VALUE argv, VALUE eobj);
6390typedef struct {
6391 VALUE begin;
6392 VALUE end;
6393 VALUE step;
6394 int exclude_end;
6395} rb_arithmetic_sequence_components_t;
6396VALUE rb_enumeratorize(VALUE recv, VALUE meth, int argc, const VALUE *argv);
6397VALUE rb_enumeratorize_with_size(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func);
6398VALUE rb_enumeratorize_with_size_kw(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func, int kw_splat);
6399__attribute__((__nonnull__ ()))
6400int rb_arithmetic_sequence_extract(VALUE as, rb_arithmetic_sequence_components_t *buf);
6401__attribute__((__nonnull__ ()))
6402VALUE rb_arithmetic_sequence_beg_len_step(VALUE as, long *begp, long *lenp, long *stepp, long len, int err);
6403
6404
6405
6406
6407__attribute__((__nonnull__ ()))
6408VALUE rb_file_s_expand_path(int argc, const VALUE *argv);
6409VALUE rb_file_expand_path(VALUE fname, VALUE dname);
6410__attribute__((__nonnull__ ()))
6411VALUE rb_file_s_absolute_path(int argc, const VALUE *argv);
6412VALUE rb_file_absolute_path(VALUE fname, VALUE dname);
6413VALUE rb_file_dirname(VALUE fname);
6414__attribute__((__nonnull__ ()))
6415int rb_find_file_ext(VALUE *feature, const char *const *exts);
6416VALUE rb_find_file(VALUE path);
6417VALUE rb_file_directory_p(VALUE _, VALUE path);
6418VALUE rb_str_encode_ospath(VALUE path);
6419__attribute__((__nonnull__ ()))
6420__attribute__((__pure__))
6421int rb_is_absolute_path(const char *path);
6422off_t rb_file_size(VALUE file);
6423
6424
6425
6426
6427__attribute__((__cold__))
6428__attribute__((__noreturn__))
6429void rb_memerror(void);
6430__attribute__((__pure__))
6431int rb_during_gc(void);
6432__attribute__((__nonnull__ (1)))
6433void rb_gc_mark_locations(const VALUE *start, const VALUE *end);
6434void rb_mark_tbl(struct st_table *tbl);
6435void rb_mark_tbl_no_pin(struct st_table *tbl);
6436void rb_mark_set(struct st_table *tbl);
6437void rb_mark_hash(struct st_table *tbl);
6438void rb_gc_update_tbl_refs(st_table *ptr);
6439void rb_gc_mark_maybe(VALUE obj);
6440void rb_gc_mark(VALUE obj);
6441void rb_gc_mark_movable(VALUE obj);
6442VALUE rb_gc_location(VALUE obj);
6443__attribute__((__deprecated__ ("this is now a no-op function")))
6444void rb_gc_force_recycle(VALUE obj);
6445void rb_gc(void);
6446void rb_gc_copy_finalizer(VALUE dst, VALUE src);
6447VALUE rb_gc_enable(void);
6448VALUE rb_gc_disable(void);
6449VALUE rb_gc_start(void);
6450VALUE rb_define_finalizer(VALUE obj, VALUE block);
6451VALUE rb_undefine_finalizer(VALUE obj);
6452size_t rb_gc_count(void);
6453size_t rb_gc_stat(VALUE key_or_buf);
6454VALUE rb_gc_latest_gc_info(VALUE key_or_buf);
6455void rb_gc_adjust_memory_usage(ssize_t diff);
6456
6457
6458
6459
6460extern VALUE rb_fs;
6461extern VALUE rb_output_fs;
6462extern VALUE rb_rs;
6463extern VALUE rb_default_rs;
6464extern VALUE rb_output_rs;
6465VALUE rb_io_write(VALUE io, VALUE str);
6466VALUE rb_io_gets(VALUE io);
6467VALUE rb_io_getbyte(VALUE io);
6468VALUE rb_io_ungetc(VALUE io, VALUE c);
6469VALUE rb_io_ungetbyte(VALUE io, VALUE b);
6470VALUE rb_io_close(VALUE io);
6471VALUE rb_io_flush(VALUE io);
6472VALUE rb_io_eof(VALUE io);
6473VALUE rb_io_binmode(VALUE io);
6474VALUE rb_io_ascii8bit_binmode(VALUE io);
6475VALUE rb_io_addstr(VALUE io, VALUE str);
6476VALUE rb_io_printf(int argc, const VALUE *argv, VALUE io);
6477VALUE rb_io_print(int argc, const VALUE *argv, VALUE io);
6478VALUE rb_io_puts(int argc, const VALUE *argv, VALUE io);
6479VALUE rb_io_fdopen(int fd, int flags, const char *path);
6480__attribute__((__nonnull__ ()))
6481VALUE rb_file_open(const char *fname, const char *fmode);
6482__attribute__((__nonnull__ ()))
6483VALUE rb_file_open_str(VALUE fname, const char *fmode);
6484VALUE rb_gets(void);
6485__attribute__((__nonnull__ ()))
6486void rb_write_error(const char *str);
6487void rb_write_error2(const char *str, long len);
6488void rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds);
6489__attribute__((__nonnull__ ()))
6490int rb_pipe(int *pipes);
6491int rb_reserved_fd_p(int fd);
6492int rb_cloexec_open(const char *pathname, int flags, mode_t mode);
6493int rb_cloexec_dup(int oldfd);
6494int rb_cloexec_dup2(int oldfd, int newfd);
6495__attribute__((__nonnull__ ()))
6496int rb_cloexec_pipe(int fildes[2]);
6497int rb_cloexec_fcntl_dupfd(int fd, int minfd);
6498void rb_update_max_fd(int fd);
6499void rb_fd_fix_cloexec(int fd);
6500
6501
6502
6503
6504void rb_load(VALUE path, int wrap);
6505void rb_load_protect(VALUE path, int wrap, int *state);
6506__attribute__((__nonnull__ ()))
6507int rb_provided(const char *feature);
6508__attribute__((__nonnull__ (1)))
6509int rb_feature_provided(const char *feature, const char **loading);
6510__attribute__((__nonnull__ ()))
6511void rb_provide(const char *feature);
6512VALUE rb_f_require(VALUE self, VALUE feature);
6513VALUE rb_require_string(VALUE feature);
6514void rb_ext_ractor_safe(_Bool flag);
6515
6516
6517
6518
6519VALUE rb_marshal_dump(VALUE obj, VALUE port);
6520VALUE rb_marshal_load(VALUE port);
6521void rb_marshal_define_compat(VALUE newclass, VALUE oldclass, VALUE (*dumper)(VALUE), VALUE (*loader)(VALUE, VALUE));
6522
6523
6524
6525
6526__attribute__((__noreturn__))
6527__attribute__((__cold__))
6528void rb_num_zerodiv(void);
6529VALUE rb_num_coerce_bin(VALUE lhs, VALUE rhs, ID op);
6530VALUE rb_num_coerce_cmp(VALUE lhs, VALUE rhs, ID op);
6531VALUE rb_num_coerce_relop(VALUE lhs, VALUE rhs, ID op);
6532VALUE rb_num_coerce_bit(VALUE lhs, VALUE rhs, ID op);
6533VALUE rb_num2fix(VALUE val);
6534VALUE rb_fix2str(VALUE val, int base);
6535__attribute__((__const__))
6536VALUE rb_dbl_cmp(double lhs, double rhs);
6537extern VALUE rb_int_positive_pow(long x, unsigned long y);
6538
6539
6540
6541
6542VALUE rb_class_new_instance_pass_kw(int argc, const VALUE *argv, VALUE klass);
6543VALUE rb_class_new_instance(int argc, const VALUE *argv, VALUE klass);
6544VALUE rb_class_new_instance_kw(int argc, const VALUE *argv, VALUE klass, int kw_splat);
6545int rb_eql(VALUE lhs, VALUE rhs);
6546VALUE rb_any_to_s(VALUE obj);
6547VALUE rb_inspect(VALUE obj);
6548VALUE rb_obj_is_instance_of(VALUE obj, VALUE klass);
6549VALUE rb_obj_is_kind_of(VALUE obj, VALUE klass);
6550VALUE rb_obj_alloc(VALUE klass);
6551VALUE rb_obj_clone(VALUE obj);
6552VALUE rb_obj_dup(VALUE obj);
6553VALUE rb_obj_init_copy(VALUE src, VALUE dst);
6554
6555VALUE rb_obj_taint(VALUE obj);
6556__attribute__((__pure__))
6557
6558VALUE rb_obj_tainted(VALUE obj);
6559
6560VALUE rb_obj_untaint(VALUE obj);
6561
6562VALUE rb_obj_untrust(VALUE obj);
6563__attribute__((__pure__))
6564
6565VALUE rb_obj_untrusted(VALUE obj);
6566
6567VALUE rb_obj_trust(VALUE obj);
6568VALUE rb_obj_freeze(VALUE obj);
6569__attribute__((__pure__))
6570VALUE rb_obj_frozen_p(VALUE obj);
6571VALUE rb_obj_id(VALUE obj);
6572__attribute__((__const__))
6573VALUE rb_memory_id(VALUE obj);
6574__attribute__((__pure__))
6575VALUE rb_class_real(VALUE klass);
6576__attribute__((__pure__))
6577VALUE rb_class_inherited_p(VALUE scion, VALUE ascendant);
6578__attribute__((__pure__))
6579VALUE rb_class_superclass(VALUE klass);
6580__attribute__((__nonnull__ ()))
6581VALUE rb_convert_type(VALUE val, int type, const char *name, const char *mid);
6582__attribute__((__nonnull__ ()))
6583VALUE rb_check_convert_type(VALUE val, int type, const char *name, const char *mid);
6584__attribute__((__nonnull__ ()))
6585VALUE rb_check_to_integer(VALUE val, const char *mid);
6586VALUE rb_check_to_float(VALUE val);
6587VALUE rb_to_int(VALUE val);
6588VALUE rb_check_to_int(VALUE val);
6589VALUE rb_Integer(VALUE val);
6590VALUE rb_to_float(VALUE val);
6591VALUE rb_Float(VALUE val);
6592VALUE rb_String(VALUE val);
6593VALUE rb_Array(VALUE val);
6594VALUE rb_Hash(VALUE val);
6595__attribute__((__nonnull__ ()))
6596double rb_cstr_to_dbl(const char *str, int mode);
6597double rb_str_to_dbl(VALUE str, int mode);
6598
6599
6600
6601
6602ID rb_id_attrset(ID id);
6603__attribute__((__const__))
6604int rb_is_const_id(ID id);
6605__attribute__((__const__))
6606int rb_is_global_id(ID id);
6607__attribute__((__const__))
6608int rb_is_instance_id(ID id);
6609__attribute__((__const__))
6610int rb_is_attrset_id(ID id);
6611__attribute__((__const__))
6612int rb_is_class_id(ID id);
6613__attribute__((__const__))
6614int rb_is_local_id(ID id);
6615__attribute__((__const__))
6616int rb_is_junk_id(ID);
6617__attribute__((__nonnull__ ()))
6618int rb_symname_p(const char *str);
6619VALUE rb_backref_get(void);
6620void rb_backref_set(VALUE md);
6621VALUE rb_lastline_get(void);
6622void rb_lastline_set(VALUE str);
6623VALUE rb_sym_all_symbols(void);
6624
6625
6626
6627
6628void rb_last_status_set(int status, pid_t pid);
6629VALUE rb_last_status_get(void);
6630__attribute__((__nonnull__ ()))
6631int rb_proc_exec(const char *cmd);
6632__attribute__((__noreturn__))
6633VALUE rb_f_exec(int argc, const VALUE *argv);
6634pid_t rb_waitpid(pid_t pid, int *status, int flags);
6635void rb_syswait(pid_t pid);
6636pid_t rb_spawn(int argc, const VALUE *argv);
6637pid_t rb_spawn_err(int argc, const VALUE *argv, char *errbuf, size_t buflen);
6638VALUE rb_proc_times(VALUE _);
6639VALUE rb_detach_process(pid_t pid);
6640
6641
6642
6643
6644unsigned int rb_genrand_int32(void);
6645double rb_genrand_real(void);
6646void rb_reset_random_seed(void);
6647VALUE rb_random_bytes(VALUE rnd, long n);
6648unsigned int rb_random_int32(VALUE rnd);
6649double rb_random_real(VALUE rnd);
6650unsigned long rb_random_ulong_limited(VALUE rnd, unsigned long limit);
6651unsigned long rb_genrand_ulong_limited(unsigned long i);
6652
6653
6654
6655
6656VALUE rb_range_new(VALUE beg, VALUE end, int excl);
6657__attribute__((__nonnull__ ()))
6658VALUE rb_range_beg_len(VALUE range, long *begp, long *lenp, long len, int err);
6659__attribute__((__nonnull__ ()))
6660int rb_range_values(VALUE range, VALUE *begp, VALUE *endp, int *exclp);
6661
6662
6663
6664
6665VALUE rb_rational_raw(VALUE num, VALUE den);
6666VALUE rb_rational_new(VALUE num, VALUE den);
6667VALUE rb_Rational(VALUE num, VALUE den);
6668__attribute__((__pure__))
6669VALUE rb_rational_num(VALUE rat);
6670__attribute__((__pure__))
6671VALUE rb_rational_den(VALUE rat);
6672VALUE rb_flt_rationalize_with_prec(VALUE flt, VALUE prec);
6673VALUE rb_flt_rationalize(VALUE flt);
6674
6675
6676
6677
6678int rb_memcicmp(const void *s1,const void *s2, long n);
6679void rb_match_busy(VALUE md);
6680VALUE rb_reg_nth_defined(int n, VALUE md);
6681VALUE rb_reg_nth_match(int n, VALUE md);
6682int rb_reg_backref_number(VALUE match, VALUE backref);
6683VALUE rb_reg_last_match(VALUE md);
6684VALUE rb_reg_match_pre(VALUE md);
6685VALUE rb_reg_match_post(VALUE md);
6686VALUE rb_reg_match_last(VALUE md);
6687VALUE rb_reg_new_str(VALUE src, int opts);
6688__attribute__((__nonnull__ ()))
6689VALUE rb_reg_new(const char *src, long len, int opts);
6690VALUE rb_reg_alloc(void);
6691VALUE rb_reg_init_str(VALUE re, VALUE s, int options);
6692VALUE rb_reg_match(VALUE re, VALUE str);
6693VALUE rb_reg_match2(VALUE re);
6694int rb_reg_options(VALUE re);
6695
6696
6697
6698
6699extern VALUE rb_argv0;
6700VALUE rb_get_argv(void);
6701__attribute__((__nonnull__ ()))
6702void *rb_load_file(const char *file);
6703void *rb_load_file_str(VALUE file);
6704
6705
6706struct timeval;
6707typedef struct {
6708 int maxfd;
6709 fd_set *fdset;
6710} rb_fdset_t;
6711
6712
6713__attribute__((__nonnull__ ()))
6714void rb_fd_init(rb_fdset_t *f);
6715__attribute__((__nonnull__ ()))
6716void rb_fd_term(rb_fdset_t *f);
6717__attribute__((__nonnull__ ()))
6718void rb_fd_zero(rb_fdset_t *f);
6719__attribute__((__nonnull__ ()))
6720void rb_fd_set(int fd, rb_fdset_t *f);
6721__attribute__((__nonnull__ ()))
6722void rb_fd_clr(int fd, rb_fdset_t *f);
6723__attribute__((__nonnull__ ()))
6724__attribute__((__pure__))
6725int rb_fd_isset(int fd, const rb_fdset_t *f);
6726void rb_fd_copy(rb_fdset_t *dst, const fd_set *src, int max);
6727void rb_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src);
6728int rb_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
6729
6730
6731__attribute__((__nonnull__ ()))
6732__attribute__((__pure__))
6733static inline fd_set *
6734rb_fd_ptr(const rb_fdset_t *f)
6735{
6736 return f->fdset;
6737}
6738__attribute__((__nonnull__ ()))
6739__attribute__((__pure__))
6740static inline int
6741rb_fd_max(const rb_fdset_t *f)
6742{
6743 return f->maxfd;
6744}
6745
6746
6747struct timeval;
6748int rb_thread_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
6749
6750
6751
6752
6753__attribute__((__nonnull__ ()))
6754VALUE rb_f_kill(int argc, const VALUE *argv);
6755void (*ruby_posix_signal(int, void (*)(int)))(int);
6756__attribute__((__pure__))
6757const char *ruby_signal_name(int signo);
6758void ruby_default_signal(int sig);
6759
6760
6761
6762
6763VALUE rb_f_sprintf(int argc, const VALUE *argv);
6764__attribute__((__nonnull__ (1)))
6765__attribute__((__format__(__printf__, 1, 2)))
6766VALUE rb_sprintf(const char *fmt, ...);
6767__attribute__((__nonnull__ (1)))
6768__attribute__((__format__(__printf__, 1, 0)))
6769VALUE rb_vsprintf(const char *fmt, va_list ap);
6770__attribute__((__nonnull__ (2)))
6771__attribute__((__format__(__printf__, 2, 3)))
6772VALUE rb_str_catf(VALUE dst, const char *fmt, ...);
6773__attribute__((__nonnull__ (2)))
6774__attribute__((__format__(__printf__, 2, 0)))
6775VALUE rb_str_vcatf(VALUE dst, const char *fmt, va_list ap);
6776VALUE rb_str_format(int argc, const VALUE *argv, VALUE fmt);
6777
6778
6779
6780
6781VALUE rb_str_new(const char *ptr, long len);
6782VALUE rb_str_new_cstr(const char *ptr);
6783VALUE rb_str_new_shared(VALUE str);
6784VALUE rb_str_new_frozen(VALUE str);
6785VALUE rb_str_new_with_class(VALUE obj, const char *ptr, long len);
6786VALUE rb_tainted_str_new_cstr(const char *ptr);
6787VALUE rb_tainted_str_new(const char *ptr, long len);
6788VALUE rb_external_str_new(const char *ptr, long len);
6789__attribute__((__nonnull__ ()))
6790VALUE rb_external_str_new_cstr(const char *ptr);
6791VALUE rb_locale_str_new(const char *ptr, long len);
6792__attribute__((__nonnull__ ()))
6793VALUE rb_locale_str_new_cstr(const char *ptr);
6794VALUE rb_filesystem_str_new(const char *ptr, long len);
6795__attribute__((__nonnull__ ()))
6796VALUE rb_filesystem_str_new_cstr(const char *ptr);
6797VALUE rb_str_buf_new(long capa);
6798__attribute__((__nonnull__ ()))
6799VALUE rb_str_buf_new_cstr(const char *ptr);
6800VALUE rb_str_tmp_new(long len);
6801VALUE rb_usascii_str_new(const char *ptr, long len);
6802VALUE rb_usascii_str_new_cstr(const char *ptr);
6803VALUE rb_utf8_str_new(const char *ptr, long len);
6804VALUE rb_utf8_str_new_cstr(const char *ptr);
6805VALUE rb_str_new_static(const char *ptr, long len);
6806VALUE rb_usascii_str_new_static(const char *ptr, long len);
6807VALUE rb_utf8_str_new_static(const char *ptr, long len);
6808VALUE rb_str_to_interned_str(VALUE str);
6809VALUE rb_interned_str(const char *ptr, long len);
6810__attribute__((__nonnull__ ()))
6811VALUE rb_interned_str_cstr(const char *ptr);
6812void rb_str_free(VALUE str);
6813void rb_str_shared_replace(VALUE dst, VALUE src);
6814VALUE rb_str_buf_append(VALUE dst, VALUE src);
6815VALUE rb_str_buf_cat(VALUE, const char*, long);
6816VALUE rb_str_buf_cat2(VALUE, const char*);
6817__attribute__((__nonnull__ ()))
6818VALUE rb_str_buf_cat_ascii(VALUE dst, const char *src);
6819VALUE rb_obj_as_string(VALUE obj);
6820VALUE rb_check_string_type(VALUE obj);
6821void rb_must_asciicompat(VALUE obj);
6822VALUE rb_str_dup(VALUE str);
6823VALUE rb_str_resurrect(VALUE str);
6824VALUE rb_str_locktmp(VALUE str);
6825VALUE rb_str_unlocktmp(VALUE str);
6826VALUE rb_str_dup_frozen(VALUE);
6827VALUE rb_str_plus(VALUE lhs, VALUE rhs);
6828VALUE rb_str_times(VALUE str, VALUE num);
6829long rb_str_sublen(VALUE str, long pos);
6830VALUE rb_str_substr(VALUE str, long beg, long len);
6831VALUE rb_str_subseq(VALUE str, long beg, long len);
6832char *rb_str_subpos(VALUE str, long beg, long *len);
6833void rb_str_modify(VALUE str);
6834void rb_str_modify_expand(VALUE str, long capa);
6835VALUE rb_str_freeze(VALUE str);
6836void rb_str_set_len(VALUE str, long len);
6837VALUE rb_str_resize(VALUE str, long len);
6838VALUE rb_str_cat(VALUE dst, const char *src, long srclen);
6839VALUE rb_str_cat_cstr(VALUE dst, const char *src);
6840VALUE rb_str_cat2(VALUE, const char*);
6841VALUE rb_str_append(VALUE dst, VALUE src);
6842VALUE rb_str_concat(VALUE dst, VALUE src);
6843st_index_t rb_memhash(const void *ptr, long len);
6844st_index_t rb_hash_start(st_index_t i);
6845st_index_t rb_str_hash(VALUE str);
6846int rb_str_hash_cmp(VALUE str1, VALUE str2);
6847int rb_str_comparable(VALUE str1, VALUE str2);
6848int rb_str_cmp(VALUE lhs, VALUE rhs);
6849VALUE rb_str_equal(VALUE str1, VALUE str2);
6850VALUE rb_str_drop_bytes(VALUE str, long len);
6851void rb_str_update(VALUE dst, long beg, long len, VALUE src);
6852VALUE rb_str_replace(VALUE dst, VALUE src);
6853VALUE rb_str_inspect(VALUE str);
6854VALUE rb_str_dump(VALUE str);
6855VALUE rb_str_split(VALUE str, const char *delim);
6856rb_gvar_setter_t rb_str_setter;
6857VALUE rb_str_intern(VALUE str);
6858VALUE rb_sym_to_s(VALUE sym);
6859long rb_str_strlen(VALUE str);
6860VALUE rb_str_length(VALUE);
6861long rb_str_offset(VALUE str, long pos);
6862__attribute__((__pure__))
6863size_t rb_str_capacity(VALUE str);
6864VALUE rb_str_ellipsize(VALUE str, long len);
6865VALUE rb_str_scrub(VALUE str, VALUE repl);
6866VALUE rb_str_succ(VALUE orig);
6867__attribute__((__nonnull__ ()))
6868static inline long
6869rbimpl_strlen(const char *str)
6870{
6871 return ((long)strlen(str));
6872}
6873__attribute__((__nonnull__ ()))
6874static inline VALUE
6875rbimpl_str_new_cstr(const char *str)
6876{
6877 long len = rbimpl_strlen(str);
6878 return rb_str_new_static(str, len);
6879}
6880__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
6881static inline VALUE
6882rbimpl_tainted_str_new_cstr(const char *str)
6883{
6884 long len = rbimpl_strlen(str);
6885 return rb_tainted_str_new(str, len);
6886}
6887__attribute__((__nonnull__ ()))
6888static inline VALUE
6889rbimpl_usascii_str_new_cstr(const char *str)
6890{
6891 long len = rbimpl_strlen(str);
6892 return rb_usascii_str_new_static(str, len);
6893}
6894__attribute__((__nonnull__ ()))
6895static inline VALUE
6896rbimpl_utf8_str_new_cstr(const char *str)
6897{
6898 long len = rbimpl_strlen(str);
6899 return rb_utf8_str_new_static(str, len);
6900}
6901__attribute__((__nonnull__ ()))
6902static inline VALUE
6903rbimpl_external_str_new_cstr(const char *str)
6904{
6905 long len = rbimpl_strlen(str);
6906 return rb_external_str_new(str, len);
6907}
6908__attribute__((__nonnull__ ()))
6909static inline VALUE
6910rbimpl_locale_str_new_cstr(const char *str)
6911{
6912 long len = rbimpl_strlen(str);
6913 return rb_locale_str_new(str, len);
6914}
6915__attribute__((__nonnull__ ()))
6916static inline VALUE
6917rbimpl_str_buf_new_cstr(const char *str)
6918{
6919 long len = rbimpl_strlen(str);
6920 VALUE buf = rb_str_buf_new(len);
6921 return rb_str_buf_cat(buf, str, len);
6922}
6923__attribute__((__nonnull__ ()))
6924static inline VALUE
6925rbimpl_str_cat_cstr(VALUE buf, const char *str)
6926{
6927 long len = rbimpl_strlen(str);
6928 return rb_str_cat(buf, str, len);
6929}
6930__attribute__((__nonnull__ ()))
6931static inline VALUE
6932rbimpl_exc_new_cstr(VALUE exc, const char *str)
6933{
6934 long len = rbimpl_strlen(str);
6935 return rb_exc_new(exc, str, len);
6936}
6937
6938
6939
6940
6941VALUE rb_struct_new(VALUE klass, ...);
6942VALUE rb_struct_define(const char *name, ...);
6943__attribute__((__nonnull__ (2)))
6944VALUE rb_struct_define_under(VALUE space, const char *name, ...);
6945VALUE rb_struct_alloc(VALUE klass, VALUE values);
6946VALUE rb_struct_initialize(VALUE self, VALUE values);
6947VALUE rb_struct_getmember(VALUE self, ID key);
6948VALUE rb_struct_s_members(VALUE klass);
6949VALUE rb_struct_members(VALUE self);
6950VALUE rb_struct_alloc_noinit(VALUE klass);
6951VALUE rb_struct_define_without_accessor(const char *name, VALUE super, rb_alloc_func_t func, ...);
6952__attribute__((__nonnull__ (2)))
6953VALUE rb_struct_define_without_accessor_under(VALUE outer, const char *class_name, VALUE super, rb_alloc_func_t alloc, ...);
6954
6955
6956
6957
6958struct timeval;
6959void rb_thread_schedule(void);
6960int rb_thread_wait_fd(int fd);
6961int rb_thread_fd_writable(int fd);
6962void rb_thread_fd_close(int fd);
6963int rb_thread_alone(void);
6964void rb_thread_sleep(int sec);
6965void rb_thread_sleep_forever(void);
6966void rb_thread_sleep_deadly(void);
6967VALUE rb_thread_stop(void);
6968VALUE rb_thread_wakeup(VALUE thread);
6969VALUE rb_thread_wakeup_alive(VALUE thread);
6970VALUE rb_thread_run(VALUE thread);
6971VALUE rb_thread_kill(VALUE thread);
6972__attribute__((__nonnull__ (1)))
6973VALUE rb_thread_create(VALUE (*f)(void *g), void *g);
6974void rb_thread_wait_for(struct timeval time);
6975VALUE rb_thread_current(void);
6976VALUE rb_thread_main(void);
6977VALUE rb_thread_local_aref(VALUE thread, ID key);
6978VALUE rb_thread_local_aset(VALUE thread, ID key, VALUE val);
6979void rb_thread_atfork(void);
6980void rb_thread_atfork_before_exec(void);
6981VALUE rb_exec_recursive(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);
6982VALUE rb_exec_recursive_paired(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);
6983VALUE rb_exec_recursive_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);
6984VALUE rb_exec_recursive_paired_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);
6985typedef void rb_unblock_function_t(void *);
6986typedef VALUE rb_blocking_function_t(void *);
6987void rb_thread_check_ints(void);
6988int rb_thread_interrupted(VALUE thval);
6989VALUE rb_mutex_new(void);
6990VALUE rb_mutex_locked_p(VALUE mutex);
6991VALUE rb_mutex_trylock(VALUE mutex);
6992VALUE rb_mutex_lock(VALUE mutex);
6993VALUE rb_mutex_unlock(VALUE mutex);
6994VALUE rb_mutex_sleep(VALUE self, VALUE timeout);
6995VALUE rb_mutex_synchronize(VALUE mutex, VALUE (*func)(VALUE arg), VALUE arg);
6996
6997
6998
6999
7000struct timespec;
7001struct timeval;
7002__attribute__((__nonnull__ ()))
7003void rb_timespec_now(struct timespec *ts);
7004VALUE rb_time_new(time_t sec, long usec);
7005VALUE rb_time_nano_new(time_t sec, long nsec);
7006__attribute__((__nonnull__ ()))
7007VALUE rb_time_timespec_new(const struct timespec *ts, int offset);
7008VALUE rb_time_num_new(VALUE timev, VALUE off);
7009struct timeval rb_time_interval(VALUE num);
7010struct timeval rb_time_timeval(VALUE time);
7011struct timespec rb_time_timespec(VALUE time);
7012struct timespec rb_time_timespec_interval(VALUE num);
7013VALUE rb_time_utc_offset(VALUE time);
7014
7015
7016
7017
7018VALUE rb_mod_name(VALUE mod);
7019VALUE rb_class_path(VALUE mod);
7020VALUE rb_class_path_cached(VALUE mod);
7021__attribute__((__nonnull__ ()))
7022void rb_set_class_path(VALUE klass, VALUE space, const char *name);
7023void rb_set_class_path_string(VALUE klass, VALUE space, VALUE name);
7024VALUE rb_path_to_class(VALUE path);
7025__attribute__((__nonnull__ ()))
7026VALUE rb_path2class(const char *path);
7027VALUE rb_class_name(VALUE obj);
7028VALUE rb_autoload_load(VALUE space, ID name);
7029VALUE rb_autoload_p(VALUE space, ID name);
7030VALUE rb_f_trace_var(int argc, const VALUE *argv);
7031VALUE rb_f_untrace_var(int argc, const VALUE *argv);
7032VALUE rb_f_global_variables(void);
7033void rb_alias_variable(ID dst, ID src);
7034void rb_free_generic_ivar(VALUE obj);
7035VALUE rb_ivar_get(VALUE obj, ID name);
7036VALUE rb_ivar_set(VALUE obj, ID name, VALUE val);
7037VALUE rb_ivar_defined(VALUE obj, ID name);
7038void rb_ivar_foreach(VALUE obj, int (*func)(ID name, VALUE val, st_data_t arg), st_data_t arg);
7039st_index_t rb_ivar_count(VALUE obj);
7040VALUE rb_attr_get(VALUE obj, ID name);
7041VALUE rb_obj_instance_variables(VALUE obj);
7042VALUE rb_obj_remove_instance_variable(VALUE obj, VALUE name);
7043void *rb_mod_const_at(VALUE, void*);
7044void *rb_mod_const_of(VALUE, void*);
7045VALUE rb_const_list(void*);
7046VALUE rb_mod_constants(int argc, const VALUE *argv, VALUE recv);
7047VALUE rb_mod_remove_const(VALUE space, VALUE name);
7048int rb_const_defined(VALUE space, ID name);
7049int rb_const_defined_at(VALUE space, ID name);
7050int rb_const_defined_from(VALUE space, ID name);
7051VALUE rb_const_get(VALUE space, ID name);
7052VALUE rb_const_get_at(VALUE space, ID name);
7053VALUE rb_const_get_from(VALUE space, ID name);
7054void rb_const_set(VALUE space, ID name, VALUE val);
7055VALUE rb_const_remove(VALUE space, ID name);
7056VALUE rb_cvar_defined(VALUE klass, ID name);
7057void rb_cvar_set(VALUE klass, ID name, VALUE val);
7058VALUE rb_cvar_get(VALUE klass, ID name);
7059__attribute__((__nonnull__ ()))
7060VALUE rb_cvar_find(VALUE klass, ID name, VALUE *front);
7061__attribute__((__nonnull__ ()))
7062void rb_cv_set(VALUE klass, const char *name, VALUE val);
7063__attribute__((__nonnull__ ()))
7064VALUE rb_cv_get(VALUE klass, const char *name);
7065__attribute__((__nonnull__ ()))
7066void rb_define_class_variable(VALUE, const char*, VALUE);
7067VALUE rb_mod_class_variables(int argc, const VALUE *argv, VALUE recv);
7068VALUE rb_mod_remove_cvar(VALUE mod, VALUE name);
7069
7070
7071int ruby_native_thread_p(void);
7072__attribute__((__nonnull__ (3)))
7073__attribute__((__format__(__printf__, 3, 4)))
7074int ruby_snprintf(char *str, size_t n, char const *fmt, ...);
7075__attribute__((__nonnull__ (3)))
7076__attribute__((__format__(__printf__, 3, 0)))
7077int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
7078
7079
7080
7081typedef __sig_atomic_t sig_atomic_t;
7082union sigval
7083{
7084 int sival_int;
7085 void *sival_ptr;
7086};
7087typedef union sigval __sigval_t;
7088typedef struct
7089 {
7090 int si_signo;
7091 int si_errno;
7092 int si_code;
7093 int __pad0;
7094 union
7095 {
7096 int _pad[((128 / sizeof (int)) - 4)];
7097 struct
7098 {
7099 __pid_t si_pid;
7100 __uid_t si_uid;
7101 } _kill;
7102 struct
7103 {
7104 int si_tid;
7105 int si_overrun;
7106 __sigval_t si_sigval;
7107 } _timer;
7108 struct
7109 {
7110 __pid_t si_pid;
7111 __uid_t si_uid;
7112 __sigval_t si_sigval;
7113 } _rt;
7114 struct
7115 {
7116 __pid_t si_pid;
7117 __uid_t si_uid;
7118 int si_status;
7119 __clock_t si_utime;
7120 __clock_t si_stime;
7121 } _sigchld;
7122 struct
7123 {
7124 void *si_addr;
7125
7126 short int si_addr_lsb;
7127 union
7128 {
7129 struct
7130 {
7131 void *_lower;
7132 void *_upper;
7133 } _addr_bnd;
7134 __uint32_t _pkey;
7135 } _bounds;
7136 } _sigfault;
7137 struct
7138 {
7139 long int si_band;
7140 int si_fd;
7141 } _sigpoll;
7142 struct
7143 {
7144 void *_call_addr;
7145 int _syscall;
7146 unsigned int _arch;
7147 } _sigsys;
7148 } _sifields;
7149 } siginfo_t ;
7150enum
7151{
7152 SI_ASYNCNL = -60,
7153 SI_DETHREAD = -7,
7154 SI_TKILL,
7155 SI_SIGIO,
7156 SI_ASYNCIO,
7157 SI_MESGQ,
7158 SI_TIMER,
7159 SI_QUEUE,
7160 SI_USER,
7161 SI_KERNEL = 0x80
7162};
7163enum
7164{
7165 ILL_ILLOPC = 1,
7166 ILL_ILLOPN,
7167 ILL_ILLADR,
7168 ILL_ILLTRP,
7169 ILL_PRVOPC,
7170 ILL_PRVREG,
7171 ILL_COPROC,
7172 ILL_BADSTK,
7173 ILL_BADIADDR
7174};
7175enum
7176{
7177 FPE_INTDIV = 1,
7178 FPE_INTOVF,
7179 FPE_FLTDIV,
7180 FPE_FLTOVF,
7181 FPE_FLTUND,
7182 FPE_FLTRES,
7183 FPE_FLTINV,
7184 FPE_FLTSUB,
7185 FPE_FLTUNK = 14,
7186 FPE_CONDTRAP
7187};
7188enum
7189{
7190 SEGV_MAPERR = 1,
7191 SEGV_ACCERR,
7192 SEGV_BNDERR,
7193 SEGV_PKUERR,
7194 SEGV_ACCADI,
7195 SEGV_ADIDERR,
7196 SEGV_ADIPERR,
7197 SEGV_MTEAERR,
7198 SEGV_MTESERR
7199};
7200enum
7201{
7202 BUS_ADRALN = 1,
7203 BUS_ADRERR,
7204 BUS_OBJERR,
7205 BUS_MCEERR_AR,
7206 BUS_MCEERR_AO
7207};
7208enum
7209{
7210 TRAP_BRKPT = 1,
7211 TRAP_TRACE,
7212 TRAP_BRANCH,
7213 TRAP_HWBKPT,
7214 TRAP_UNK
7215};
7216enum
7217{
7218 CLD_EXITED = 1,
7219 CLD_KILLED,
7220 CLD_DUMPED,
7221 CLD_TRAPPED,
7222 CLD_STOPPED,
7223 CLD_CONTINUED
7224};
7225enum
7226{
7227 POLL_IN = 1,
7228 POLL_OUT,
7229 POLL_MSG,
7230 POLL_ERR,
7231 POLL_PRI,
7232 POLL_HUP
7233};
7234typedef __sigval_t sigval_t;
7235typedef struct sigevent
7236 {
7237 __sigval_t sigev_value;
7238 int sigev_signo;
7239 int sigev_notify;
7240 union
7241 {
7242 int _pad[((64 / sizeof (int)) - 4)];
7243 __pid_t _tid;
7244 struct
7245 {
7246 void (*_function) (__sigval_t);
7247 pthread_attr_t *_attribute;
7248 } _sigev_thread;
7249 } _sigev_un;
7250 } sigevent_t;
7251enum
7252{
7253 SIGEV_SIGNAL = 0,
7254 SIGEV_NONE,
7255 SIGEV_THREAD,
7256 SIGEV_THREAD_ID = 4
7257};
7258typedef void (*__sighandler_t) (int);
7259extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler)
7260 __attribute__ ((__nothrow__ , __leaf__));
7261extern __sighandler_t sysv_signal (int __sig, __sighandler_t __handler)
7262 __attribute__ ((__nothrow__ , __leaf__));
7263extern __sighandler_t signal (int __sig, __sighandler_t __handler)
7264 __attribute__ ((__nothrow__ , __leaf__));
7265extern int kill (__pid_t __pid, int __sig) __attribute__ ((__nothrow__ , __leaf__));
7266extern int killpg (__pid_t __pgrp, int __sig) __attribute__ ((__nothrow__ , __leaf__));
7267extern int raise (int __sig) __attribute__ ((__nothrow__ , __leaf__));
7268extern __sighandler_t ssignal (int __sig, __sighandler_t __handler)
7269 __attribute__ ((__nothrow__ , __leaf__));
7270extern int gsignal (int __sig) __attribute__ ((__nothrow__ , __leaf__));
7271extern void psignal (int __sig, const char *__s);
7272extern void psiginfo (const siginfo_t *__pinfo, const char *__s);
7273extern int sigpause (int __sig) __asm__ ("__xpg_sigpause")
7274 __attribute__ ((__deprecated__ ("Use the sigsuspend function instead")));
7275extern int sigblock (int __mask) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
7276extern int sigsetmask (int __mask) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
7277extern int siggetmask (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
7278typedef __sighandler_t sighandler_t;
7279typedef __sighandler_t sig_t;
7280extern int sigemptyset (sigset_t *__set) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7281extern int sigfillset (sigset_t *__set) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7282extern int sigaddset (sigset_t *__set, int __signo) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7283extern int sigdelset (sigset_t *__set, int __signo) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7284extern int sigismember (const sigset_t *__set, int __signo)
7285 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7286extern int sigisemptyset (const sigset_t *__set) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7287extern int sigandset (sigset_t *__set, const sigset_t *__left,
7288 const sigset_t *__right) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3)));
7289extern int sigorset (sigset_t *__set, const sigset_t *__left,
7290 const sigset_t *__right) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3)));
7291struct sigaction
7292 {
7293 union
7294 {
7295 __sighandler_t sa_handler;
7296 void (*sa_sigaction) (int, siginfo_t *, void *);
7297 }
7298 __sigaction_handler;
7299 __sigset_t sa_mask;
7300 int sa_flags;
7301 void (*sa_restorer) (void);
7302 };
7303extern int sigprocmask (int __how, const sigset_t *__restrict __set,
7304 sigset_t *__restrict __oset) __attribute__ ((__nothrow__ , __leaf__));
7305extern int sigsuspend (const sigset_t *__set) __attribute__ ((__nonnull__ (1)));
7306extern int sigaction (int __sig, const struct sigaction *__restrict __act,
7307 struct sigaction *__restrict __oact) __attribute__ ((__nothrow__ , __leaf__));
7308extern int sigpending (sigset_t *__set) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7309extern int sigwait (const sigset_t *__restrict __set, int *__restrict __sig)
7310 __attribute__ ((__nonnull__ (1, 2)));
7311extern int sigwaitinfo (const sigset_t *__restrict __set,
7312 siginfo_t *__restrict __info) __attribute__ ((__nonnull__ (1)));
7313extern int sigtimedwait (const sigset_t *__restrict __set,
7314 siginfo_t *__restrict __info,
7315 const struct timespec *__restrict __timeout)
7316 __attribute__ ((__nonnull__ (1)));
7317extern int sigqueue (__pid_t __pid, int __sig, const union sigval __val)
7318 __attribute__ ((__nothrow__ , __leaf__));
7319struct _fpx_sw_bytes
7320{
7321 __uint32_t magic1;
7322 __uint32_t extended_size;
7323 __uint64_t xstate_bv;
7324 __uint32_t xstate_size;
7325 __uint32_t __glibc_reserved1[7];
7326};
7327struct _fpreg
7328{
7329 unsigned short significand[4];
7330 unsigned short exponent;
7331};
7332struct _fpxreg
7333{
7334 unsigned short significand[4];
7335 unsigned short exponent;
7336 unsigned short __glibc_reserved1[3];
7337};
7338struct _xmmreg
7339{
7340 __uint32_t element[4];
7341};
7342struct _fpstate
7343{
7344 __uint16_t cwd;
7345 __uint16_t swd;
7346 __uint16_t ftw;
7347 __uint16_t fop;
7348 __uint64_t rip;
7349 __uint64_t rdp;
7350 __uint32_t mxcsr;
7351 __uint32_t mxcr_mask;
7352 struct _fpxreg _st[8];
7353 struct _xmmreg _xmm[16];
7354 __uint32_t __glibc_reserved1[24];
7355};
7356struct sigcontext
7357{
7358 __uint64_t r8;
7359 __uint64_t r9;
7360 __uint64_t r10;
7361 __uint64_t r11;
7362 __uint64_t r12;
7363 __uint64_t r13;
7364 __uint64_t r14;
7365 __uint64_t r15;
7366 __uint64_t rdi;
7367 __uint64_t rsi;
7368 __uint64_t rbp;
7369 __uint64_t rbx;
7370 __uint64_t rdx;
7371 __uint64_t rax;
7372 __uint64_t rcx;
7373 __uint64_t rsp;
7374 __uint64_t rip;
7375 __uint64_t eflags;
7376 unsigned short cs;
7377 unsigned short gs;
7378 unsigned short fs;
7379 unsigned short __pad0;
7380 __uint64_t err;
7381 __uint64_t trapno;
7382 __uint64_t oldmask;
7383 __uint64_t cr2;
7384 __extension__ union
7385 {
7386 struct _fpstate * fpstate;
7387 __uint64_t __fpstate_word;
7388 };
7389 __uint64_t __reserved1 [8];
7390};
7391struct _xsave_hdr
7392{
7393 __uint64_t xstate_bv;
7394 __uint64_t __glibc_reserved1[2];
7395 __uint64_t __glibc_reserved2[5];
7396};
7397struct _ymmh_state
7398{
7399 __uint32_t ymmh_space[64];
7400};
7401struct _xstate
7402{
7403 struct _fpstate fpstate;
7404 struct _xsave_hdr xstate_hdr;
7405 struct _ymmh_state ymmh;
7406};
7407extern int sigreturn (struct sigcontext *__scp) __attribute__ ((__nothrow__ , __leaf__));
7408typedef struct
7409 {
7410 void *ss_sp;
7411 int ss_flags;
7412 size_t ss_size;
7413 } stack_t;
7414__extension__ typedef long long int greg_t;
7415typedef greg_t gregset_t[23];
7416enum
7417{
7418 REG_R8 = 0,
7419 REG_R9,
7420 REG_R10,
7421 REG_R11,
7422 REG_R12,
7423 REG_R13,
7424 REG_R14,
7425 REG_R15,
7426 REG_RDI,
7427 REG_RSI,
7428 REG_RBP,
7429 REG_RBX,
7430 REG_RDX,
7431 REG_RAX,
7432 REG_RCX,
7433 REG_RSP,
7434 REG_RIP,
7435 REG_EFL,
7436 REG_CSGSFS,
7437 REG_ERR,
7438 REG_TRAPNO,
7439 REG_OLDMASK,
7440 REG_CR2
7441};
7442struct _libc_fpxreg
7443{
7444 unsigned short int significand[4];
7445 unsigned short int exponent;
7446 unsigned short int __glibc_reserved1[3];
7447};
7448struct _libc_xmmreg
7449{
7450 __uint32_t element[4];
7451};
7452struct _libc_fpstate
7453{
7454 __uint16_t cwd;
7455 __uint16_t swd;
7456 __uint16_t ftw;
7457 __uint16_t fop;
7458 __uint64_t rip;
7459 __uint64_t rdp;
7460 __uint32_t mxcsr;
7461 __uint32_t mxcr_mask;
7462 struct _libc_fpxreg _st[8];
7463 struct _libc_xmmreg _xmm[16];
7464 __uint32_t __glibc_reserved1[24];
7465};
7466typedef struct _libc_fpstate *fpregset_t;
7467typedef struct
7468 {
7469 gregset_t gregs;
7470 fpregset_t fpregs;
7471 __extension__ unsigned long long __reserved1 [8];
7472} mcontext_t;
7473typedef struct ucontext_t
7474 {
7475 unsigned long int uc_flags;
7476 struct ucontext_t *uc_link;
7477 stack_t uc_stack;
7478 mcontext_t uc_mcontext;
7479 sigset_t uc_sigmask;
7480 struct _libc_fpstate __fpregs_mem;
7481 __extension__ unsigned long long int __ssp[4];
7482 } ucontext_t;
7483extern int siginterrupt (int __sig, int __interrupt) __attribute__ ((__nothrow__ , __leaf__))
7484 __attribute__ ((__deprecated__ ("Use sigaction with SA_RESTART instead")));
7485enum
7486{
7487 SS_ONSTACK = 1,
7488 SS_DISABLE
7489};
7490extern int sigaltstack (const stack_t *__restrict __ss,
7491 stack_t *__restrict __oss) __attribute__ ((__nothrow__ , __leaf__));
7492struct sigstack
7493 {
7494 void *ss_sp;
7495 int ss_onstack;
7496 };
7497extern int sigstack (struct sigstack *__ss, struct sigstack *__oss)
7498 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
7499extern int sighold (int __sig) __attribute__ ((__nothrow__ , __leaf__))
7500 __attribute__ ((__deprecated__ ("Use the sigprocmask function instead")));
7501extern int sigrelse (int __sig) __attribute__ ((__nothrow__ , __leaf__))
7502 __attribute__ ((__deprecated__ ("Use the sigprocmask function instead")));
7503extern int sigignore (int __sig) __attribute__ ((__nothrow__ , __leaf__))
7504 __attribute__ ((__deprecated__ ("Use the signal function instead")));
7505extern __sighandler_t sigset (int __sig, __sighandler_t __disp) __attribute__ ((__nothrow__ , __leaf__))
7506 __attribute__ ((__deprecated__ ("Use the signal and sigprocmask functions instead")));
7507extern int pthread_sigmask (int __how,
7508 const __sigset_t *__restrict __newmask,
7509 __sigset_t *__restrict __oldmask)__attribute__ ((__nothrow__ , __leaf__));
7510extern int pthread_kill (pthread_t __threadid, int __signo) __attribute__ ((__nothrow__ , __leaf__));
7511extern int pthread_sigqueue (pthread_t __threadid, int __signo,
7512 const union sigval __value) __attribute__ ((__nothrow__ , __leaf__));
7513extern int __libc_current_sigrtmin (void) __attribute__ ((__nothrow__ , __leaf__));
7514extern int __libc_current_sigrtmax (void) __attribute__ ((__nothrow__ , __leaf__));
7515extern int tgkill (__pid_t __tgid, __pid_t __tid, int __signal);
7516
7517
7518typedef long int __jmp_buf[8];
7519struct __jmp_buf_tag
7520 {
7521 __jmp_buf __jmpbuf;
7522 int __mask_was_saved;
7523 __sigset_t __saved_mask;
7524 };
7525typedef struct __jmp_buf_tag jmp_buf[1];
7526extern int setjmp (jmp_buf __env) __attribute__ ((__nothrow__));
7527extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask) __attribute__ ((__nothrow__));
7528extern int _setjmp (struct __jmp_buf_tag __env[1]) __attribute__ ((__nothrow__));
7529extern void longjmp (struct __jmp_buf_tag __env[1], int __val)
7530 __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
7531extern void _longjmp (struct __jmp_buf_tag __env[1], int __val)
7532 __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
7533typedef struct __jmp_buf_tag sigjmp_buf[1];
7534extern void siglongjmp (sigjmp_buf __env, int __val)
7535 __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
7536extern void longjmp (struct __jmp_buf_tag __env[1], int __val) __asm__ ("" "__longjmp_chk") __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
7537extern void _longjmp (struct __jmp_buf_tag __env[1], int __val) __asm__ ("" "__longjmp_chk") __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
7538extern void siglongjmp (struct __jmp_buf_tag __env[1], int __val) __asm__ ("" "__longjmp_chk") __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
7539
7540static inline char *container_of_or_null_(void *member_ptr, size_t offset)
7541{
7542 return member_ptr ? (char *)member_ptr - offset : ((void *)0);
7543}
7544struct list_node
7545{
7546 struct list_node *next, *prev;
7547};
7548struct list_head
7549{
7550 struct list_node n;
7551};
7552static inline void list_head_init(struct list_head *h)
7553{
7554 h->n.next = h->n.prev = &h->n;
7555}
7556static inline void list_node_init(struct list_node *n)
7557{
7558 n->next = n->prev = n;
7559}
7560static inline void list_add_after_(struct list_head *h,
7561 struct list_node *p,
7562 struct list_node *n,
7563 const char *abortstr)
7564{
7565 n->next = p->next;
7566 n->prev = p;
7567 p->next->prev = n;
7568 p->next = n;
7569 (void)((void)abortstr, h);
7570}
7571static inline void list_add_(struct list_head *h,
7572 struct list_node *n,
7573 const char *abortstr)
7574{
7575 list_add_after_(h, &h->n, n, abortstr);
7576}
7577static inline void list_add_before_(struct list_head *h,
7578 struct list_node *p,
7579 struct list_node *n,
7580 const char *abortstr)
7581{
7582 n->next = p;
7583 n->prev = p->prev;
7584 p->prev->next = n;
7585 p->prev = n;
7586 (void)((void)abortstr, h);
7587}
7588static inline void list_add_tail_(struct list_head *h,
7589 struct list_node *n,
7590 const char *abortstr)
7591{
7592 list_add_before_(h, &h->n, n, abortstr);
7593}
7594static inline int list_empty_(const struct list_head *h, const char* abortstr)
7595{
7596 (void)((void)abortstr, h);
7597 return h->n.next == &h->n;
7598}
7599static inline _Bool list_empty_nocheck(const struct list_head *h)
7600{
7601 return h->n.next == &h->n;
7602}
7603static inline void list_del_(struct list_node *n, const char* abortstr)
7604{
7605 (void)((void)abortstr, n);
7606 n->next->prev = n->prev;
7607 n->prev->next = n->next;
7608}
7609static inline void list_del_init_(struct list_node *n, const char *abortstr)
7610{
7611 list_del_(n, abortstr);
7612 list_node_init(n);
7613}
7614static inline void list_del_from(struct list_head *h, struct list_node *n)
7615{
7616 ((void) (0));
7617 list_del_(n, "./ccan/list/list.h" ":" "329");
7618}
7619static inline void list_swap_(struct list_node *o,
7620 struct list_node *n,
7621 const char* abortstr)
7622{
7623 (void)((void)abortstr, o);
7624 *n = *o;
7625 n->next->prev = n;
7626 n->prev->next = n;
7627}
7628static inline const void *list_top_(const struct list_head *h, size_t off)
7629{
7630 if (list_empty_(h, "./ccan/list/list.h" ":" "399"))
7631 return ((void *)0);
7632 return (const char *)h->n.next - off;
7633}
7634static inline const void *list_pop_(const struct list_head *h, size_t off)
7635{
7636 struct list_node *n;
7637 if (list_empty_(h, "./ccan/list/list.h" ":" "425"))
7638 return ((void *)0);
7639 n = h->n.next;
7640 list_del_(n, "./ccan/list/list.h" ":" "428");
7641 return (const char *)n - off;
7642}
7643static inline const void *list_tail_(const struct list_head *h, size_t off)
7644{
7645 if (list_empty_(h, "./ccan/list/list.h" ":" "451"))
7646 return ((void *)0);
7647 return (const char *)h->n.prev - off;
7648}
7649static inline void list_append_list_(struct list_head *to,
7650 struct list_head *from,
7651 const char *abortstr)
7652{
7653 struct list_node *from_tail = ((void)abortstr, from)->n.prev;
7654 struct list_node *to_tail = ((void)abortstr, to)->n.prev;
7655 to->n.prev = from_tail;
7656 from_tail->next = &to->n;
7657 to_tail->next = &from->n;
7658 from->n.prev = to_tail;
7659 list_del_(&from->n, "./ccan/list/list.h" ":" "600");
7660 list_head_init(from);
7661}
7662static inline void list_prepend_list_(struct list_head *to,
7663 struct list_head *from,
7664 const char *abortstr)
7665{
7666 struct list_node *from_tail = ((void)abortstr, from)->n.prev;
7667 struct list_node *to_head = ((void)abortstr, to)->n.next;
7668 to->n.next = &from->n;
7669 from->n.prev = &to->n;
7670 to_head->prev = from_tail;
7671 from_tail->next = to_head;
7672 list_del_(&from->n, "./ccan/list/list.h" ":" "632");
7673 list_head_init(from);
7674}
7675static inline void *list_node_to_off_(struct list_node *node, size_t off)
7676{
7677 return (void *)((char *)node - off);
7678}
7679static inline struct list_node *list_node_from_off_(void *ptr, size_t off)
7680{
7681 return (struct list_node *)((char *)ptr + off);
7682}
7683static inline void *list_entry_or_null(const struct list_head *h,
7684 const struct list_node *n,
7685 size_t off)
7686{
7687 if (n == &h->n)
7688 return ((void *)0);
7689 return (char *)n - off;
7690}
7691enum ruby_id_types {
7692 RUBY_ID_STATIC_SYM = 0x01,
7693 RUBY_ID_LOCAL = 0x00,
7694 RUBY_ID_INSTANCE = (0x01<<1),
7695 RUBY_ID_GLOBAL = (0x03<<1),
7696 RUBY_ID_ATTRSET = (0x04<<1),
7697 RUBY_ID_CONST = (0x05<<1),
7698 RUBY_ID_CLASS = (0x06<<1),
7699 RUBY_ID_JUNK = (0x07<<1),
7700 RUBY_ID_INTERNAL = RUBY_ID_JUNK,
7701 RUBY_ID_SCOPE_SHIFT = 4,
7702 RUBY_ID_SCOPE_MASK = (~(~0U<<(RUBY_ID_SCOPE_SHIFT-1))<<1)
7703};
7704enum ruby_method_ids {
7705 idDot2 = 128,
7706 idDot3 = 129,
7707 idUPlus = 132,
7708 idUMinus = 133,
7709 idPow = 134,
7710 idCmp = 135,
7711 idPLUS = '+',
7712 idMINUS = '-',
7713 idMULT = '*',
7714 idDIV = '/',
7715 idMOD = '%',
7716 idLTLT = 136,
7717 idGTGT = 137,
7718 idLT = '<',
7719 idLE = 138,
7720 idGT = '>',
7721 idGE = 139,
7722 idEq = 140,
7723 idEqq = 141,
7724 idNeq = 142,
7725 idNot = '!',
7726 idAnd = '&',
7727 idOr = '|',
7728 idBackquote = '`',
7729 idEqTilde = 143,
7730 idNeqTilde = 144,
7731 idAREF = 145,
7732 idASET = 146,
7733 idCOLON2 = 147,
7734 idANDOP = 148,
7735 idOROP = 149,
7736 idANDDOT = 150,
7737 tPRESERVED_ID_BEGIN = 150,
7738 idNilP,
7739 idNULL,
7740 idEmptyP,
7741 idEqlP,
7742 idRespond_to,
7743 idRespond_to_missing,
7744 idIFUNC,
7745 idCFUNC,
7746 id_core_set_method_alias,
7747 id_core_set_variable_alias,
7748 id_core_undef_method,
7749 id_core_define_method,
7750 id_core_define_singleton_method,
7751 id_core_set_postexe,
7752 id_core_hash_merge_ptr,
7753 id_core_hash_merge_kwd,
7754 id_core_raise,
7755 id_core_sprintf,
7756 id_debug_created_info,
7757 tPRESERVED_ID_END,
7758 tTOKEN_LOCAL_BEGIN = tPRESERVED_ID_END-1,
7759 tMax,
7760 tMin,
7761 tFreeze,
7762 tInspect,
7763 tIntern,
7764 tObject_id,
7765 tConst_missing,
7766 tMethodMissing,
7767 tMethod_added,
7768 tSingleton_method_added,
7769 tMethod_removed,
7770 tSingleton_method_removed,
7771 tMethod_undefined,
7772 tSingleton_method_undefined,
7773 tLength,
7774 tSize,
7775 tGets,
7776 tSucc,
7777 tEach,
7778 tProc,
7779 tLambda,
7780 tSend,
7781 t__send__,
7782 t__attached__,
7783 t__recursive_key__,
7784 tInitialize,
7785 tInitialize_copy,
7786 tInitialize_clone,
7787 tInitialize_dup,
7788 tTo_int,
7789 tTo_ary,
7790 tTo_str,
7791 tTo_sym,
7792 tTo_hash,
7793 tTo_proc,
7794 tTo_io,
7795 tTo_a,
7796 tTo_s,
7797 tTo_i,
7798 tTo_f,
7799 tTo_r,
7800 tBt,
7801 tBt_locations,
7802 tCall,
7803 tMesg,
7804 tException,
7805 tLocals,
7806 tNOT,
7807 tAND,
7808 tOR,
7809 tDiv,
7810 tDivmod,
7811 tFdiv,
7812 tQuo,
7813 tName,
7814 tNil,
7815 tUScore,
7816 tNUMPARAM_1,
7817 tNUMPARAM_2,
7818 tNUMPARAM_3,
7819 tNUMPARAM_4,
7820 tNUMPARAM_5,
7821 tNUMPARAM_6,
7822 tNUMPARAM_7,
7823 tNUMPARAM_8,
7824 tNUMPARAM_9,
7825 tTOKEN_LOCAL_END,
7826 tTOKEN_INSTANCE_BEGIN = tTOKEN_LOCAL_END-1,
7827 tTOKEN_INSTANCE_END,
7828 tTOKEN_GLOBAL_BEGIN = tTOKEN_INSTANCE_END-1,
7829 tLASTLINE,
7830 tBACKREF,
7831 tERROR_INFO,
7832 tTOKEN_GLOBAL_END,
7833 tTOKEN_CONST_BEGIN = tTOKEN_GLOBAL_END-1,
7834 tTOKEN_CONST_END,
7835 tTOKEN_CLASS_BEGIN = tTOKEN_CONST_END-1,
7836 tTOKEN_CLASS_END,
7837 tTOKEN_ATTRSET_BEGIN = tTOKEN_CLASS_END-1,
7838 tTOKEN_ATTRSET_END,
7839 tNEXT_ID = tTOKEN_ATTRSET_END,
7840 idMax = ((tMax<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7841 idMin = ((tMin<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7842 idFreeze = ((tFreeze<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7843 idInspect = ((tInspect<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7844 idIntern = ((tIntern<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7845 idObject_id = ((tObject_id<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7846 idConst_missing = ((tConst_missing<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7847 idMethodMissing = ((tMethodMissing<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7848 idMethod_added = ((tMethod_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7849 idSingleton_method_added = ((tSingleton_method_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7850 idMethod_removed = ((tMethod_removed<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7851 idSingleton_method_removed = ((tSingleton_method_removed<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7852 idMethod_undefined = ((tMethod_undefined<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7853 idSingleton_method_undefined = ((tSingleton_method_undefined<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7854 idLength = ((tLength<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7855 idSize = ((tSize<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7856 idGets = ((tGets<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7857 idSucc = ((tSucc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7858 idEach = ((tEach<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7859 idProc = ((tProc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7860 idLambda = ((tLambda<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7861 idSend = ((tSend<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7862 id__send__ = ((t__send__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7863 id__attached__ = ((t__attached__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7864 id__recursive_key__ = ((t__recursive_key__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7865 idInitialize = ((tInitialize<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7866 idInitialize_copy = ((tInitialize_copy<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7867 idInitialize_clone = ((tInitialize_clone<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7868 idInitialize_dup = ((tInitialize_dup<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7869 idTo_int = ((tTo_int<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7870 idTo_ary = ((tTo_ary<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7871 idTo_str = ((tTo_str<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7872 idTo_sym = ((tTo_sym<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7873 idTo_hash = ((tTo_hash<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7874 idTo_proc = ((tTo_proc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7875 idTo_io = ((tTo_io<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7876 idTo_a = ((tTo_a<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7877 idTo_s = ((tTo_s<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7878 idTo_i = ((tTo_i<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7879 idTo_f = ((tTo_f<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7880 idTo_r = ((tTo_r<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7881 idBt = ((tBt<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7882 idBt_locations = ((tBt_locations<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7883 idCall = ((tCall<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7884 idMesg = ((tMesg<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7885 idException = ((tException<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7886 idLocals = ((tLocals<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7887 idNOT = ((tNOT<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7888 idAND = ((tAND<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7889 idOR = ((tOR<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7890 idDiv = ((tDiv<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7891 idDivmod = ((tDivmod<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7892 idFdiv = ((tFdiv<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7893 idQuo = ((tQuo<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7894 idName = ((tName<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7895 idNil = ((tNil<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7896 idUScore = ((tUScore<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7897 idNUMPARAM_1 = ((tNUMPARAM_1<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7898 idNUMPARAM_2 = ((tNUMPARAM_2<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7899 idNUMPARAM_3 = ((tNUMPARAM_3<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7900 idNUMPARAM_4 = ((tNUMPARAM_4<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7901 idNUMPARAM_5 = ((tNUMPARAM_5<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7902 idNUMPARAM_6 = ((tNUMPARAM_6<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7903 idNUMPARAM_7 = ((tNUMPARAM_7<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7904 idNUMPARAM_8 = ((tNUMPARAM_8<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7905 idNUMPARAM_9 = ((tNUMPARAM_9<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
7906 idLASTLINE = ((tLASTLINE<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
7907 idBACKREF = ((tBACKREF<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
7908 idERROR_INFO = ((tERROR_INFO<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
7909 tLAST_OP_ID = tPRESERVED_ID_END-1,
7910 idLAST_OP_ID = tLAST_OP_ID >> RUBY_ID_SCOPE_SHIFT
7911};
7912void rb_obj_info_dump(VALUE obj);
7913void rb_obj_info_dump_loc(VALUE obj, const char *file, int line, const char *func);
7914
7915
7916void ruby_debug_breakpoint(void);
7917__attribute__((__format__(__printf__, (1), (2)))) void ruby_debug_printf(const char*, ...);
7918
7919
7920VALUE rb_ary_last(int, const VALUE *, VALUE);
7921void rb_ary_set_len(VALUE, long);
7922void rb_ary_delete_same(VALUE, VALUE);
7923VALUE rb_ary_tmp_new_fill(long capa);
7924VALUE rb_ary_at(VALUE, VALUE);
7925size_t rb_ary_memsize(VALUE);
7926VALUE rb_to_array_type(VALUE obj);
7927VALUE rb_to_array(VALUE obj);
7928void rb_ary_cancel_sharing(VALUE ary);
7929static inline VALUE rb_ary_entry_internal(VALUE ary, long offset);
7930static inline _Bool ARY_PTR_USING_P(VALUE ary);
7931static inline void RARY_TRANSIENT_SET(VALUE ary);
7932static inline void RARY_TRANSIENT_UNSET(VALUE ary);
7933
7934
7935VALUE rb_ary_tmp_new_from_values(VALUE, long, const VALUE *);
7936VALUE rb_check_to_array(VALUE ary);
7937VALUE rb_ary_behead(VALUE, long);
7938VALUE rb_ary_aref1(VALUE ary, VALUE i);
7939struct rb_execution_context_struct;
7940VALUE rb_ec_ary_new_from_values(struct rb_execution_context_struct *ec, long n, const VALUE *elts);
7941
7942
7943static inline VALUE
7944rb_ary_entry_internal(VALUE ary, long offset)
7945{
7946 long len = rb_array_len(ary);
7947 const VALUE *ptr = rb_array_const_ptr_transient(ary);
7948 if (len == 0) return ((VALUE)RUBY_Qnil);
7949 if (offset < 0) {
7950 offset += len;
7951 if (offset < 0) return ((VALUE)RUBY_Qnil);
7952 }
7953 else if (len <= offset) {
7954 return ((VALUE)RUBY_Qnil);
7955 }
7956 return ptr[offset];
7957}
7958static inline _Bool
7959ARY_PTR_USING_P(VALUE ary)
7960{
7961 return RB_FL_TEST_RAW(ary, ((VALUE)RUBY_FL_USER14));
7962}
7963static inline void
7964RARY_TRANSIENT_SET(VALUE ary)
7965{
7966 RB_FL_SET_RAW(ary, RARRAY_TRANSIENT_FLAG);
7967}
7968static inline void
7969RARY_TRANSIENT_UNSET(VALUE ary)
7970{
7971 RB_FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG);
7972}
7973__attribute__((__pure__))
7974__attribute__((__artificial__))
7975static inline VALUE
7976RARRAY_AREF(VALUE ary, long i)
7977{
7978 ((void)0);
7979 return rb_array_const_ptr_transient(ary)[i];
7980}
7981typedef unsigned long long rb_serial_t;
7982struct rb_callable_method_entry_struct;
7983struct rb_method_definition_struct;
7984struct rb_execution_context_struct;
7985struct rb_control_frame_struct;
7986struct rb_callinfo;
7987enum method_missing_reason {
7988 MISSING_NOENTRY = 0x00,
7989 MISSING_PRIVATE = 0x01,
7990 MISSING_PROTECTED = 0x02,
7991 MISSING_FCALL = 0x04,
7992 MISSING_VCALL = 0x08,
7993 MISSING_SUPER = 0x10,
7994 MISSING_MISSING = 0x20,
7995 MISSING_NONE = 0x40
7996};
7997rb_serial_t rb_next_class_serial(void);
7998VALUE rb_obj_is_thread(VALUE obj);
7999void rb_vm_mark(void *ptr);
8000void rb_vm_each_stack_value(void *ptr, void (*cb)(VALUE, void*), void *ctx);
8001__attribute__((__pure__)) VALUE rb_vm_top_self(void);
8002void rb_vm_inc_const_missing_count(void);
8003const void **rb_vm_get_insns_address_table(void);
8004VALUE rb_source_location(int *pline);
8005const char *rb_source_location_cstr(int *pline);
8006static void rb_vm_pop_cfunc_frame(void);
8007int rb_vm_add_root_module(VALUE module);
8008void rb_vm_check_redefinition_by_prepend(VALUE klass);
8009int rb_vm_check_optimizable_mid(VALUE mid);
8010VALUE rb_yield_refine_block(VALUE refinement, VALUE refinements);
8011static VALUE ruby_vm_special_exception_copy(VALUE);
8012__attribute__((__pure__)) st_table *rb_vm_fstring_table(void);
8013
8014
8015VALUE rb_vm_exec(struct rb_execution_context_struct *, _Bool);
8016
8017
8018VALUE rb_current_realfilepath(void);
8019VALUE rb_check_block_call(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE);
8020typedef void rb_check_funcall_hook(int, VALUE, ID, int, const VALUE *, VALUE);
8021VALUE rb_check_funcall_with_hook(VALUE recv, ID mid, int argc, const VALUE *argv,
8022 rb_check_funcall_hook *hook, VALUE arg);
8023VALUE rb_check_funcall_with_hook_kw(VALUE recv, ID mid, int argc, const VALUE *argv,
8024 rb_check_funcall_hook *hook, VALUE arg, int kw_splat);
8025const char *rb_type_str(enum ruby_value_type type);
8026VALUE rb_check_funcall_default(VALUE, ID, int, const VALUE *, VALUE);
8027VALUE rb_check_funcall_basic_kw(VALUE, ID, VALUE, int, const VALUE*, int);
8028VALUE rb_yield_1(VALUE val);
8029VALUE rb_yield_force_blockarg(VALUE values);
8030VALUE rb_lambda_call(VALUE obj, ID mid, int argc, const VALUE *argv,
8031 rb_block_call_func_t bl_proc, int min_argc, int max_argc,
8032 VALUE data2);
8033void rb_check_stack_overflow(void);
8034VALUE rb_equal_opt(VALUE obj1, VALUE obj2);
8035VALUE rb_eql_opt(VALUE obj1, VALUE obj2);
8036struct rb_iseq_struct;
8037
8038
8039const struct rb_callcache *rb_vm_search_method_slowpath(const struct rb_callinfo *ci, VALUE klass);
8040
8041
8042struct rb_execution_context_struct;
8043
8044
8045int rb_ec_obj_respond_to(struct rb_execution_context_struct *ec, VALUE obj, ID id, int priv);
8046
8047
8048void rb_print_backtrace(void);
8049VALUE rb_vm_thread_backtrace(int argc, const VALUE *argv, VALUE thval);
8050VALUE rb_vm_thread_backtrace_locations(int argc, const VALUE *argv, VALUE thval);
8051VALUE rb_vm_backtrace(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
8052VALUE rb_vm_backtrace_locations(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
8053VALUE rb_make_backtrace(void);
8054void rb_backtrace_print_as_bugreport(void);
8055int rb_backtrace_p(VALUE obj);
8056VALUE rb_backtrace_to_str_ary(VALUE obj);
8057VALUE rb_backtrace_to_location_ary(VALUE obj);
8058void rb_backtrace_each(VALUE (*iter)(VALUE recv, VALUE str), VALUE output);
8059int rb_frame_info_p(VALUE obj);
8060int rb_get_node_id_from_frame_info(VALUE obj);
8061const struct rb_iseq_struct *rb_get_iseq_from_frame_info(VALUE obj);
8062
8063
8064VALUE rb_ec_backtrace_object(const struct rb_execution_context_struct *ec);
8065void rb_backtrace_use_iseq_first_lineno_for_last_location(VALUE self);
8066
8067
8068struct rb_execution_context_struct;
8069struct rb_objspace;
8070typedef struct ractor_newobj_size_pool_cache {
8071 struct RVALUE *freelist;
8072 struct heap_page *using_page;
8073} rb_ractor_newobj_size_pool_cache_t;
8074typedef struct ractor_newobj_cache {
8075 rb_ractor_newobj_size_pool_cache_t size_pool_caches[1];
8076} rb_ractor_newobj_cache_t;
8077extern VALUE *ruby_initial_gc_stress_ptr;
8078extern int ruby_disable_gc;
8079__attribute__((__malloc__)) void *ruby_mimmalloc(size_t size);
8080void ruby_mimfree(void *ptr);
8081void rb_objspace_set_event_hook(const rb_event_flag_t event);
8082VALUE rb_objspace_gc_enable(struct rb_objspace *);
8083VALUE rb_objspace_gc_disable(struct rb_objspace *);
8084void ruby_gc_set_params(void);
8085void rb_copy_wb_protected_attribute(VALUE dest, VALUE obj);
8086__attribute__((__alloc_align__(1)))
8087__attribute__((__malloc__)) void *rb_aligned_malloc(size_t, size_t) __attribute__((__alloc_size__ (2)));
8088size_t rb_size_mul_or_raise(size_t, size_t, VALUE);
8089size_t rb_size_mul_add_or_raise(size_t, size_t, size_t, VALUE);
8090__attribute__((__malloc__)) void *rb_xmalloc_mul_add(size_t, size_t, size_t);
8091void *rb_xrealloc_mul_add(const void *, size_t, size_t, size_t);
8092__attribute__((__malloc__)) void *rb_xmalloc_mul_add_mul(size_t, size_t, size_t, size_t);
8093__attribute__((__malloc__)) void *rb_xcalloc_mul_add_mul(size_t, size_t, size_t, size_t);
8094static inline void *ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2)));
8095static inline void *ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2, 3)));
8096static inline void ruby_sized_xfree_inlined(void *ptr, size_t size);
8097VALUE rb_class_allocate_instance(VALUE klass);
8098void rb_gc_ractor_newobj_cache_clear(rb_ractor_newobj_cache_t *newobj_cache);
8099size_t rb_gc_obj_slot_size(VALUE obj);
8100_Bool rb_gc_size_allocatable_p(size_t size);
8101int rb_objspace_garbage_object_p(VALUE obj);
8102
8103
8104const char *rb_objspace_data_type_name(VALUE obj);
8105VALUE rb_wb_protected_newobj_of(VALUE, VALUE, size_t);
8106VALUE rb_wb_unprotected_newobj_of(VALUE, VALUE, size_t);
8107VALUE rb_ec_wb_protected_newobj_of(struct rb_execution_context_struct *ec, VALUE klass, VALUE flags, size_t);
8108size_t rb_obj_memsize_of(VALUE);
8109void rb_gc_verify_internal_consistency(void);
8110size_t rb_obj_gc_flags(VALUE, ID[], size_t);
8111void rb_gc_mark_values(long n, const VALUE *values);
8112void rb_gc_mark_vm_stack_values(long n, const VALUE *values);
8113void *ruby_sized_xrealloc(void *ptr, size_t new_size, size_t old_size) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2)));
8114void *ruby_sized_xrealloc2(void *ptr, size_t new_count, size_t element_size, size_t old_count) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2, 3)));
8115void ruby_sized_xfree(void *x, size_t size);
8116
8117
8118
8119
8120int rb_ec_stack_check(struct rb_execution_context_struct *ec);
8121void rb_gc_writebarrier_remember(VALUE obj);
8122const char *rb_obj_info(VALUE obj);
8123
8124
8125static inline void *
8126ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size)
8127{
8128 return ruby_xrealloc(ptr, new_size);
8129}
8130static inline void *
8131ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count)
8132{
8133 return ruby_xrealloc2(ptr, new_count, elemsiz);
8134}
8135static inline void
8136ruby_sized_xfree_inlined(void *ptr, size_t size)
8137{
8138 ruby_xfree(ptr);
8139}
8140enum imemo_type {
8141 imemo_env = 0,
8142 imemo_cref = 1,
8143 imemo_svar = 2,
8144 imemo_throw_data = 3,
8145 imemo_ifunc = 4,
8146 imemo_memo = 5,
8147 imemo_ment = 6,
8148 imemo_iseq = 7,
8149 imemo_tmpbuf = 8,
8150 imemo_ast = 9,
8151 imemo_parser_strterm = 10,
8152 imemo_callinfo = 11,
8153 imemo_callcache = 12,
8154 imemo_constcache = 13,
8155};
8156struct vm_svar {
8157 VALUE flags;
8158 const VALUE cref_or_me;
8159 const VALUE lastline;
8160 const VALUE backref;
8161 const VALUE others;
8162};
8163struct vm_throw_data {
8164 VALUE flags;
8165 VALUE reserved;
8166 const VALUE throw_obj;
8167 const struct rb_control_frame_struct *catch_frame;
8168 int throw_state;
8169};
8170struct vm_ifunc_argc {
8171 int min, max;
8172};
8173struct vm_ifunc {
8174 VALUE flags;
8175 VALUE reserved;
8176 rb_block_call_func_t func;
8177 const void *data;
8178 struct vm_ifunc_argc argc;
8179};
8180struct rb_imemo_tmpbuf_struct {
8181 VALUE flags;
8182 VALUE reserved;
8183 VALUE *ptr;
8184 struct rb_imemo_tmpbuf_struct *next;
8185 size_t cnt;
8186};
8187struct MEMO {
8188 VALUE flags;
8189 VALUE reserved;
8190 const VALUE v1;
8191 const VALUE v2;
8192 union {
8193 long cnt;
8194 long state;
8195 const VALUE value;
8196 void (*func)(void);
8197 } u3;
8198};
8199typedef struct rb_imemo_tmpbuf_struct rb_imemo_tmpbuf_t;
8200VALUE rb_imemo_new(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0);
8201rb_imemo_tmpbuf_t *rb_imemo_tmpbuf_parser_heap(void *buf, rb_imemo_tmpbuf_t *old_heap, size_t cnt);
8202struct vm_ifunc *rb_vm_ifunc_new(rb_block_call_func_t func, const void *data, int min_argc, int max_argc);
8203void rb_strterm_mark(VALUE obj);
8204static inline enum imemo_type imemo_type(VALUE imemo);
8205static inline int imemo_type_p(VALUE imemo, enum imemo_type imemo_type);
8206static inline _Bool imemo_throw_data_p(VALUE imemo);
8207static inline struct vm_ifunc *rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data);
8208static inline VALUE rb_imemo_tmpbuf_auto_free_pointer(void);
8209static inline void *RB_IMEMO_TMPBUF_PTR(VALUE v);
8210static inline void *rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr);
8211static inline VALUE rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str);
8212static inline void MEMO_V1_SET(struct MEMO *m, VALUE v);
8213static inline void MEMO_V2_SET(struct MEMO *m, VALUE v);
8214
8215
8216VALUE rb_imemo_new(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0);
8217const char *rb_imemo_name(enum imemo_type type);
8218
8219
8220static inline enum imemo_type
8221imemo_type(VALUE imemo)
8222{
8223 return (((struct RBasic *)(imemo))->flags >> ((VALUE)RUBY_FL_USHIFT)) & 0x0f;
8224}
8225static inline int
8226imemo_type_p(VALUE imemo, enum imemo_type imemo_type)
8227{
8228 if ((__builtin_expect(!!(!RB_SPECIAL_CONST_P(imemo)), 1))) {
8229 const VALUE mask = (0x0f << ((VALUE)RUBY_FL_USHIFT)) | RUBY_T_MASK;
8230 const VALUE expected_type = (imemo_type << ((VALUE)RUBY_FL_USHIFT)) | RUBY_T_IMEMO;
8231 return expected_type == (((struct RBasic *)(imemo))->flags & mask);
8232 }
8233 else {
8234 return 0;
8235 }
8236}
8237static inline _Bool
8238imemo_throw_data_p(VALUE imemo)
8239{
8240 return RB_TYPE_P(imemo, RUBY_T_IMEMO);
8241}
8242static inline struct vm_ifunc *
8243rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data)
8244{
8245 return rb_vm_ifunc_new(func, data, 0, (-1));
8246}
8247static inline VALUE
8248rb_imemo_tmpbuf_auto_free_pointer(void)
8249{
8250 return rb_imemo_new(imemo_tmpbuf, 0, 0, 0, 0);
8251}
8252static inline void *
8253RB_IMEMO_TMPBUF_PTR(VALUE v)
8254{
8255 const struct rb_imemo_tmpbuf_struct *p = (const void *)v;
8256 return p->ptr;
8257}
8258static inline void *
8259rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr)
8260{
8261 return ((rb_imemo_tmpbuf_t *)v)->ptr = ptr;
8262}
8263static inline VALUE
8264rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str)
8265{
8266 const void *src;
8267 VALUE imemo;
8268 rb_imemo_tmpbuf_t *tmpbuf;
8269 void *dst;
8270 size_t len;
8271 rb_string_value(&(str));
8272 imemo = rb_imemo_tmpbuf_auto_free_pointer();
8273 tmpbuf = (rb_imemo_tmpbuf_t *)imemo;
8274 len = RSTRING_LEN(str);
8275 src = RSTRING_PTR(str);
8276 dst = ruby_xmalloc(len);
8277 ruby_nonempty_memcpy(dst, src, len);
8278 tmpbuf->ptr = dst;
8279 return imemo;
8280}
8281static inline void
8282MEMO_V1_SET(struct MEMO *m, VALUE v)
8283{
8284 rb_obj_write((VALUE)(m), __extension__({
8285 ;
8286 ; __typeof__((VALUE *)(&m->v1)) unaligned_member_access_result = ((VALUE *)(&m->v1));
8287 ; unaligned_member_access_result; }), (VALUE)(v), "./internal/imemo.h", 234);
8288}
8289static inline void
8290MEMO_V2_SET(struct MEMO *m, VALUE v)
8291{
8292 rb_obj_write((VALUE)(m), __extension__({
8293 ;
8294 ; __typeof__((VALUE *)(&m->v2)) unaligned_member_access_result = ((VALUE *)(&m->v2));
8295 ; unaligned_member_access_result; }), (VALUE)(v), "./internal/imemo.h", 240);
8296}
8297typedef enum {
8298 METHOD_VISI_UNDEF = 0x00,
8299 METHOD_VISI_PUBLIC = 0x01,
8300 METHOD_VISI_PRIVATE = 0x02,
8301 METHOD_VISI_PROTECTED = 0x03,
8302 METHOD_VISI_MASK = 0x03
8303} rb_method_visibility_t;
8304typedef struct rb_scope_visi_struct {
8305 rb_method_visibility_t method_visi : 3;
8306 unsigned int module_func : 1;
8307} rb_scope_visibility_t;
8308typedef struct rb_cref_struct {
8309 VALUE flags;
8310 VALUE refinements;
8311 VALUE klass_or_self;
8312 struct rb_cref_struct * next;
8313 const rb_scope_visibility_t scope_visi;
8314} rb_cref_t;
8315typedef struct rb_method_entry_struct {
8316 VALUE flags;
8317 VALUE defined_class;
8318 struct rb_method_definition_struct * const def;
8319 ID called_id;
8320 VALUE owner;
8321} rb_method_entry_t;
8322typedef struct rb_callable_method_entry_struct {
8323 VALUE flags;
8324 const VALUE defined_class;
8325 struct rb_method_definition_struct * const def;
8326 ID called_id;
8327 const VALUE owner;
8328} rb_callable_method_entry_t;
8329static inline void
8330METHOD_ENTRY_VISI_SET(rb_method_entry_t *me, rb_method_visibility_t visi)
8331{
8332 ((void)0);
8333 me->flags = (me->flags & ~(((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) | (visi << ((((VALUE)RUBY_FL_USHIFT) + 4)+0));
8334}
8335static inline void
8336METHOD_ENTRY_BASIC_SET(rb_method_entry_t *me, unsigned int basic)
8337{
8338 ((void)0);
8339 me->flags = (me->flags & ~(((VALUE)RUBY_FL_USER6) )) | (basic << ((((VALUE)RUBY_FL_USHIFT) + 4)+2));
8340}
8341static inline void
8342METHOD_ENTRY_FLAGS_SET(rb_method_entry_t *me, rb_method_visibility_t visi, unsigned int basic)
8343{
8344 ((void)0);
8345 ((void)0);
8346 me->flags =
8347 (me->flags & ~(((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6))) |
8348 ((visi << ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) | (basic << ((((VALUE)RUBY_FL_USHIFT) + 4)+2)));
8349}
8350static inline void
8351METHOD_ENTRY_FLAGS_COPY(rb_method_entry_t *dst, const rb_method_entry_t *src)
8352{
8353 dst->flags =
8354 (dst->flags & ~(((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6))) |
8355 (src->flags & (((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6)));
8356}
8357typedef enum {
8358 VM_METHOD_TYPE_ISEQ,
8359 VM_METHOD_TYPE_CFUNC,
8360 VM_METHOD_TYPE_ATTRSET,
8361 VM_METHOD_TYPE_IVAR,
8362 VM_METHOD_TYPE_BMETHOD,
8363 VM_METHOD_TYPE_ZSUPER,
8364 VM_METHOD_TYPE_ALIAS,
8365 VM_METHOD_TYPE_UNDEF,
8366 VM_METHOD_TYPE_NOTIMPLEMENTED,
8367 VM_METHOD_TYPE_OPTIMIZED,
8368 VM_METHOD_TYPE_MISSING,
8369 VM_METHOD_TYPE_REFINED,
8370
8371} rb_method_type_t;
8372__extension__ _Static_assert(VM_METHOD_TYPE_REFINED <= (1<<4), "VM_METHOD_TYPE_MINIMUM_BITS" ": " "VM_METHOD_TYPE_REFINED <= (1<<VM_METHOD_TYPE_MINIMUM_BITS)");
8373typedef struct rb_iseq_struct rb_iseq_t;
8374typedef struct rb_method_iseq_struct {
8375 const rb_iseq_t * iseqptr;
8376 rb_cref_t * cref;
8377} rb_method_iseq_t;
8378typedef struct rb_method_cfunc_struct {
8379 VALUE (*func)();
8380 VALUE (*invoker)(VALUE recv, int argc, const VALUE *argv, VALUE (*func)());
8381 int argc;
8382} rb_method_cfunc_t;
8383typedef struct rb_method_attr_struct {
8384 ID id;
8385 VALUE location;
8386} rb_method_attr_t;
8387typedef struct rb_method_alias_struct {
8388 struct rb_method_entry_struct * original_me;
8389} rb_method_alias_t;
8390typedef struct rb_method_refined_struct {
8391 struct rb_method_entry_struct * orig_me;
8392 VALUE owner;
8393} rb_method_refined_t;
8394typedef struct rb_method_bmethod_struct {
8395 VALUE proc;
8396 struct rb_hook_list_struct *hooks;
8397 VALUE defined_ractor;
8398} rb_method_bmethod_t;
8399enum method_optimized_type {
8400 OPTIMIZED_METHOD_TYPE_SEND,
8401 OPTIMIZED_METHOD_TYPE_CALL,
8402 OPTIMIZED_METHOD_TYPE_BLOCK_CALL,
8403 OPTIMIZED_METHOD_TYPE_STRUCT_AREF,
8404 OPTIMIZED_METHOD_TYPE_STRUCT_ASET,
8405 OPTIMIZED_METHOD_TYPE__MAX
8406};
8407typedef struct rb_method_optimized {
8408 enum method_optimized_type type;
8409 unsigned int index;
8410} rb_method_optimized_t;
8411struct rb_method_definition_struct {
8412 rb_method_type_t type : 4;
8413 unsigned int iseq_overload: 1;
8414 int alias_count : 27;
8415 int complemented_count : 28;
8416 unsigned int no_redef_warning: 1;
8417 union {
8418 rb_method_iseq_t iseq;
8419 rb_method_cfunc_t cfunc;
8420 rb_method_attr_t attr;
8421 rb_method_alias_t alias;
8422 rb_method_refined_t refined;
8423 rb_method_bmethod_t bmethod;
8424 rb_method_optimized_t optimized;
8425 } body;
8426 ID original_id;
8427 uintptr_t method_serial;
8428};
8429struct rb_id_table;
8430typedef struct rb_method_definition_struct rb_method_definition_t;
8431__extension__ _Static_assert(__builtin_offsetof (rb_method_definition_t, body)==8, "sizeof_method_def" ": " "offsetof(rb_method_definition_t, body)==8");
8432void rb_add_method(VALUE klass, ID mid, rb_method_type_t type, void *option, rb_method_visibility_t visi);
8433void rb_add_method_cfunc(VALUE klass, ID mid, VALUE (*func)(), int argc, rb_method_visibility_t visi);
8434void rb_add_method_iseq(VALUE klass, ID mid, const rb_iseq_t *iseq, rb_cref_t *cref, rb_method_visibility_t visi);
8435void rb_add_method_optimized(VALUE klass, ID mid, enum method_optimized_type, unsigned int index, rb_method_visibility_t visi);
8436void rb_add_refined_method_entry(VALUE refined_class, ID mid);
8437rb_method_entry_t *rb_method_entry_set(VALUE klass, ID mid, const rb_method_entry_t *, rb_method_visibility_t noex);
8438rb_method_entry_t *rb_method_entry_create(ID called_id, VALUE klass, rb_method_visibility_t visi, const rb_method_definition_t *def);
8439const rb_method_entry_t *rb_method_entry_at(VALUE obj, ID id);
8440const rb_method_entry_t *rb_method_entry(VALUE klass, ID id);
8441const rb_method_entry_t *rb_method_entry_with_refinements(VALUE klass, ID id, VALUE *defined_class);
8442const rb_method_entry_t *rb_method_entry_without_refinements(VALUE klass, ID id, VALUE *defined_class);
8443const rb_method_entry_t *rb_resolve_refined_method(VALUE refinements, const rb_method_entry_t *me);
8444
8445
8446const rb_method_entry_t *rb_resolve_me_location(const rb_method_entry_t *, VALUE[5]);
8447
8448
8449const rb_callable_method_entry_t *rb_callable_method_entry(VALUE klass, ID id);
8450const rb_callable_method_entry_t *rb_callable_method_entry_with_refinements(VALUE klass, ID id, VALUE *defined_class);
8451const rb_callable_method_entry_t *rb_callable_method_entry_without_refinements(VALUE klass, ID id, VALUE *defined_class);
8452int rb_method_entry_arity(const rb_method_entry_t *me);
8453int rb_method_entry_eq(const rb_method_entry_t *m1, const rb_method_entry_t *m2);
8454st_index_t rb_hash_method_entry(st_index_t hash, const rb_method_entry_t *me);
8455VALUE rb_method_entry_location(const rb_method_entry_t *me);
8456void rb_free_method_entry(const rb_method_entry_t *me);
8457const rb_method_entry_t *rb_method_entry_clone(const rb_method_entry_t *me);
8458const rb_callable_method_entry_t *rb_method_entry_complement_defined_class(const rb_method_entry_t *src_me, ID called_id, VALUE defined_class);
8459void rb_method_entry_copy(rb_method_entry_t *dst, const rb_method_entry_t *src);
8460void rb_method_table_insert(VALUE klass, struct rb_id_table *table, ID method_id, const rb_method_entry_t *me);
8461void rb_scope_visibility_set(rb_method_visibility_t);
8462VALUE rb_unnamed_parameters(int arity);
8463void rb_clear_method_cache(VALUE klass_or_module, ID mid);
8464void rb_clear_method_cache_all(void);
8465enum node_type {
8466 NODE_SCOPE,
8467 NODE_BLOCK,
8468 NODE_IF,
8469 NODE_UNLESS,
8470 NODE_CASE,
8471 NODE_CASE2,
8472 NODE_CASE3,
8473 NODE_WHEN,
8474 NODE_IN,
8475 NODE_WHILE,
8476 NODE_UNTIL,
8477 NODE_ITER,
8478 NODE_FOR,
8479 NODE_FOR_MASGN,
8480 NODE_BREAK,
8481 NODE_NEXT,
8482 NODE_REDO,
8483 NODE_RETRY,
8484 NODE_BEGIN,
8485 NODE_RESCUE,
8486 NODE_RESBODY,
8487 NODE_ENSURE,
8488 NODE_AND,
8489 NODE_OR,
8490 NODE_MASGN,
8491 NODE_LASGN,
8492 NODE_DASGN,
8493 NODE_GASGN,
8494 NODE_IASGN,
8495 NODE_CDECL,
8496 NODE_CVASGN,
8497 NODE_OP_ASGN1,
8498 NODE_OP_ASGN2,
8499 NODE_OP_ASGN_AND,
8500 NODE_OP_ASGN_OR,
8501 NODE_OP_CDECL,
8502 NODE_CALL,
8503 NODE_OPCALL,
8504 NODE_FCALL,
8505 NODE_VCALL,
8506 NODE_QCALL,
8507 NODE_SUPER,
8508 NODE_ZSUPER,
8509 NODE_LIST,
8510 NODE_ZLIST,
8511 NODE_VALUES,
8512 NODE_HASH,
8513 NODE_RETURN,
8514 NODE_YIELD,
8515 NODE_LVAR,
8516 NODE_DVAR,
8517 NODE_GVAR,
8518 NODE_IVAR,
8519 NODE_CONST,
8520 NODE_CVAR,
8521 NODE_NTH_REF,
8522 NODE_BACK_REF,
8523 NODE_MATCH,
8524 NODE_MATCH2,
8525 NODE_MATCH3,
8526 NODE_LIT,
8527 NODE_STR,
8528 NODE_DSTR,
8529 NODE_XSTR,
8530 NODE_DXSTR,
8531 NODE_EVSTR,
8532 NODE_DREGX,
8533 NODE_ONCE,
8534 NODE_ARGS,
8535 NODE_ARGS_AUX,
8536 NODE_OPT_ARG,
8537 NODE_KW_ARG,
8538 NODE_POSTARG,
8539 NODE_ARGSCAT,
8540 NODE_ARGSPUSH,
8541 NODE_SPLAT,
8542 NODE_BLOCK_PASS,
8543 NODE_DEFN,
8544 NODE_DEFS,
8545 NODE_ALIAS,
8546 NODE_VALIAS,
8547 NODE_UNDEF,
8548 NODE_CLASS,
8549 NODE_MODULE,
8550 NODE_SCLASS,
8551 NODE_COLON2,
8552 NODE_COLON3,
8553 NODE_DOT2,
8554 NODE_DOT3,
8555 NODE_FLIP2,
8556 NODE_FLIP3,
8557 NODE_SELF,
8558 NODE_NIL,
8559 NODE_TRUE,
8560 NODE_FALSE,
8561 NODE_ERRINFO,
8562 NODE_DEFINED,
8563 NODE_POSTEXE,
8564 NODE_DSYM,
8565 NODE_ATTRASGN,
8566 NODE_LAMBDA,
8567 NODE_ARYPTN,
8568 NODE_HSHPTN,
8569 NODE_FNDPTN,
8570 NODE_LAST
8571};
8572typedef struct rb_code_position_struct {
8573 int lineno;
8574 int column;
8575} rb_code_position_t;
8576typedef struct rb_code_location_struct {
8577 rb_code_position_t beg_pos;
8578 rb_code_position_t end_pos;
8579} rb_code_location_t;
8580static inline rb_code_location_t
8581code_loc_gen(const rb_code_location_t *loc1, const rb_code_location_t *loc2)
8582{
8583 rb_code_location_t loc;
8584 loc.beg_pos = loc1->beg_pos;
8585 loc.end_pos = loc2->end_pos;
8586 return loc;
8587}
8588typedef struct rb_ast_id_table {
8589 int size;
8590 ID ids[];
8591} rb_ast_id_table_t;
8592typedef struct RNode {
8593 VALUE flags;
8594 union {
8595 struct RNode *node;
8596 ID id;
8597 VALUE value;
8598 rb_ast_id_table_t *tbl;
8599 } u1;
8600 union {
8601 struct RNode *node;
8602 ID id;
8603 long argc;
8604 VALUE value;
8605 } u2;
8606 union {
8607 struct RNode *node;
8608 ID id;
8609 long state;
8610 struct rb_args_info *args;
8611 struct rb_ary_pattern_info *apinfo;
8612 struct rb_fnd_pattern_info *fpinfo;
8613 VALUE value;
8614 } u3;
8615 rb_code_location_t nd_loc;
8616 int node_id;
8617} NODE;
8618VALUE rb_node_case_when_optimizable_literal(const NODE *const node);
8619
8620
8621typedef struct node_buffer_struct node_buffer_t;
8622typedef struct rb_ast_body_struct {
8623 const NODE *root;
8624 VALUE compile_option;
8625 VALUE script_lines;
8626} rb_ast_body_t;
8627typedef struct rb_ast_struct {
8628 VALUE flags;
8629 node_buffer_t *node_buffer;
8630 rb_ast_body_t body;
8631} rb_ast_t;
8632rb_ast_t *rb_ast_new(void);
8633void rb_ast_mark(rb_ast_t*);
8634void rb_ast_update_references(rb_ast_t*);
8635void rb_ast_dispose(rb_ast_t*);
8636void rb_ast_free(rb_ast_t*);
8637size_t rb_ast_memsize(const rb_ast_t*);
8638void rb_ast_add_mark_object(rb_ast_t*, VALUE);
8639NODE *rb_ast_newnode(rb_ast_t*, enum node_type type);
8640void rb_ast_delete_node(rb_ast_t*, NODE *n);
8641rb_ast_id_table_t *rb_ast_new_local_table(rb_ast_t*, int);
8642rb_ast_id_table_t *rb_ast_resize_latest_local_table(rb_ast_t*, int);
8643VALUE rb_parser_new(void);
8644VALUE rb_parser_end_seen_p(VALUE);
8645VALUE rb_parser_encoding(VALUE);
8646VALUE rb_parser_set_yydebug(VALUE, VALUE);
8647VALUE rb_parser_dump_tree(const NODE *node, int comment);
8648void rb_parser_set_options(VALUE, int, int, int, int);
8649rb_ast_t *rb_parser_compile_string(VALUE, const char*, VALUE, int);
8650rb_ast_t *rb_parser_compile_string_path(VALUE vparser, VALUE fname, VALUE src, int line);
8651rb_ast_t *rb_parser_compile_file_path(VALUE vparser, VALUE fname, VALUE input, int line);
8652rb_ast_t *rb_parser_compile_generic(VALUE vparser, VALUE (*lex_gets)(VALUE, int), VALUE fname, VALUE input, int line);
8653void rb_node_init(NODE *n, enum node_type type, VALUE a0, VALUE a1, VALUE a2);
8654const char *ruby_node_name(int node);
8655const struct kwtable *rb_reserved_word(const char *, unsigned int);
8656struct rb_args_info {
8657 NODE *pre_init;
8658 NODE *post_init;
8659 int pre_args_num;
8660 int post_args_num;
8661 ID first_post_arg;
8662 ID rest_arg;
8663 ID block_arg;
8664 NODE *kw_args;
8665 NODE *kw_rest_arg;
8666 NODE *opt_args;
8667 unsigned int no_kwarg: 1;
8668 unsigned int ruby2_keywords: 1;
8669 VALUE imemo;
8670};
8671struct rb_ary_pattern_info {
8672 NODE *pre_args;
8673 NODE *rest_arg;
8674 NODE *post_args;
8675};
8676struct rb_fnd_pattern_info {
8677 NODE *pre_rest_arg;
8678 NODE *args;
8679 NODE *post_rest_arg;
8680};
8681struct parser_params;
8682void *rb_parser_malloc(struct parser_params *, size_t);
8683void *rb_parser_realloc(struct parser_params *, void *, size_t);
8684void *rb_parser_calloc(struct parser_params *, size_t, size_t);
8685void rb_parser_free(struct parser_params *, void *);
8686__attribute__((__format__(__printf__, (2), (3)))) void rb_parser_printf(struct parser_params *parser, const char *fmt, ...);
8687void rb_ast_node_type_change(NODE *n, enum node_type type);
8688
8689
8690static inline VALUE
8691rb_node_set_type(NODE *n, enum node_type t)
8692{
8693 return (n)->flags=(((n)->flags&~(((VALUE)0x7f)<<8))|((((unsigned long)(t))<<8)&(((VALUE)0x7f)<<8)));
8694}
8695static inline _Bool
8696nd_type_p(const NODE *n, enum node_type t)
8697{
8698 return (enum node_type)((int) (((n)->flags & (((VALUE)0x7f)<<8))>>8)) == t;
8699}
8700typedef unsigned int rb_atomic_t;
8701__attribute__((__artificial__))
8702
8703__attribute__((__nonnull__ (1)))
8704static inline rb_atomic_t
8705rbimpl_atomic_fetch_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
8706{
8707 return __atomic_fetch_add(ptr, val, 5);
8708}
8709__attribute__((__artificial__))
8710
8711__attribute__((__nonnull__ (1)))
8712static inline void
8713rbimpl_atomic_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
8714{
8715 __atomic_add_fetch(ptr, val, 5);
8716}
8717__attribute__((__artificial__))
8718
8719__attribute__((__nonnull__ (1)))
8720static inline void
8721rbimpl_atomic_size_add(volatile size_t *ptr, size_t val)
8722{
8723 __atomic_add_fetch(ptr, val, 5);
8724}
8725__attribute__((__artificial__))
8726
8727__attribute__((__nonnull__ (1)))
8728static inline void
8729rbimpl_atomic_inc(volatile rb_atomic_t *ptr)
8730{
8731 rbimpl_atomic_add(ptr, 1);
8732}
8733__attribute__((__artificial__))
8734
8735__attribute__((__nonnull__ (1)))
8736static inline void
8737rbimpl_atomic_size_inc(volatile size_t *ptr)
8738{
8739 rbimpl_atomic_size_add(ptr, 1);
8740}
8741__attribute__((__artificial__))
8742
8743__attribute__((__nonnull__ (1)))
8744static inline rb_atomic_t
8745rbimpl_atomic_fetch_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
8746{
8747 return __atomic_fetch_sub(ptr, val, 5);
8748}
8749__attribute__((__artificial__))
8750
8751__attribute__((__nonnull__ (1)))
8752static inline void
8753rbimpl_atomic_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
8754{
8755 __atomic_sub_fetch(ptr, val, 5);
8756}
8757__attribute__((__artificial__))
8758
8759__attribute__((__nonnull__ (1)))
8760static inline void
8761rbimpl_atomic_size_sub(volatile size_t *ptr, size_t val)
8762{
8763 __atomic_sub_fetch(ptr, val, 5);
8764}
8765__attribute__((__artificial__))
8766
8767__attribute__((__nonnull__ (1)))
8768static inline void
8769rbimpl_atomic_dec(volatile rb_atomic_t *ptr)
8770{
8771 rbimpl_atomic_sub(ptr, 1);
8772}
8773__attribute__((__artificial__))
8774
8775__attribute__((__nonnull__ (1)))
8776static inline void
8777rbimpl_atomic_size_dec(volatile size_t *ptr)
8778{
8779 rbimpl_atomic_size_sub(ptr, 1);
8780}
8781__attribute__((__artificial__))
8782
8783__attribute__((__nonnull__ (1)))
8784static inline void
8785rbimpl_atomic_or(volatile rb_atomic_t *ptr, rb_atomic_t val)
8786{
8787 __atomic_or_fetch(ptr, val, 5);
8788}
8789__attribute__((__artificial__))
8790
8791__attribute__((__nonnull__ (1)))
8792static inline rb_atomic_t
8793rbimpl_atomic_exchange(volatile rb_atomic_t *ptr, rb_atomic_t val)
8794{
8795 return __atomic_exchange_n(ptr, val, 5);
8796}
8797__attribute__((__artificial__))
8798
8799__attribute__((__nonnull__ (1)))
8800static inline size_t
8801rbimpl_atomic_size_exchange(volatile size_t *ptr, size_t val)
8802{
8803 return __atomic_exchange_n(ptr, val, 5);
8804}
8805__attribute__((__artificial__))
8806
8807__attribute__((__nonnull__ (1)))
8808static inline void *
8809rbimpl_atomic_ptr_exchange(void *volatile *ptr, const void *val)
8810{
8811 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_voidp" ": " "sizeof *ptr == sizeof(size_t)");
8812 const size_t sval = ((size_t)val);
8813 volatile size_t *const sptr = ((volatile size_t *)ptr);
8814 const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
8815 return ((void *)sret);
8816}
8817__attribute__((__artificial__))
8818
8819__attribute__((__nonnull__ (1)))
8820static inline VALUE
8821rbimpl_atomic_value_exchange(volatile VALUE *ptr, VALUE val)
8822{
8823 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_value" ": " "sizeof *ptr == sizeof(size_t)");
8824 const size_t sval = ((size_t)val);
8825 volatile size_t *const sptr = ((volatile size_t *)ptr);
8826 const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
8827 return ((VALUE)sret);
8828}
8829__attribute__((__artificial__))
8830
8831__attribute__((__nonnull__ (1)))
8832static inline void
8833rbimpl_atomic_set(volatile rb_atomic_t *ptr, rb_atomic_t val)
8834{
8835 __atomic_store_n(ptr, val, 5);
8836}
8837__attribute__((__artificial__))
8838
8839__attribute__((__nonnull__ (1)))
8840static inline rb_atomic_t
8841rbimpl_atomic_cas(volatile rb_atomic_t *ptr, rb_atomic_t oldval, rb_atomic_t newval)
8842{
8843 __atomic_compare_exchange_n(
8844 ptr, &oldval, newval, 0, 5, 5);
8845 return oldval;
8846}
8847__attribute__((__artificial__))
8848
8849__attribute__((__nonnull__ (1)))
8850static inline size_t
8851rbimpl_atomic_size_cas(volatile size_t *ptr, size_t oldval, size_t newval)
8852{
8853 __atomic_compare_exchange_n(
8854 ptr, &oldval, newval, 0, 5, 5);
8855 return oldval;
8856}
8857__attribute__((__artificial__))
8858
8859__attribute__((__nonnull__ (1)))
8860static inline void *
8861rbimpl_atomic_ptr_cas(void **ptr, const void *oldval, const void *newval)
8862{
8863 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_voidp" ": " "sizeof *ptr == sizeof(size_t)");
8864 const size_t snew = ((size_t)newval);
8865 const size_t sold = ((size_t)oldval);
8866 volatile size_t *const sptr = ((volatile size_t *)ptr);
8867 const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
8868 return ((void *)sret);
8869}
8870__attribute__((__artificial__))
8871
8872__attribute__((__nonnull__ (1)))
8873static inline VALUE
8874rbimpl_atomic_value_cas(volatile VALUE *ptr, VALUE oldval, VALUE newval)
8875{
8876 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_value" ": " "sizeof *ptr == sizeof(size_t)");
8877 const size_t snew = ((size_t)newval);
8878 const size_t sold = ((size_t)oldval);
8879 volatile size_t *const sptr = ((volatile size_t *)ptr);
8880 const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
8881 return ((VALUE)sret);
8882}
8883typedef struct rb_darray_meta {
8884 int32_t size;
8885 int32_t capa;
8886} rb_darray_meta_t;
8887static inline int32_t
8888rb_darray_size(const void *ary)
8889{
8890 const rb_darray_meta_t *meta = ary;
8891 return meta ? meta->size : 0;
8892}
8893static inline int32_t
8894rb_darray_capa(const void *ary)
8895{
8896 const rb_darray_meta_t *meta = ary;
8897 return meta ? meta->capa : 0;
8898}
8899static inline void
8900rb_darray_free(void *ary)
8901{
8902 free(ary);
8903}
8904static inline size_t
8905rb_darray_buffer_size(int32_t capacity, size_t header_size, size_t element_size)
8906{
8907 if (capacity == 0) return 0;
8908 return header_size + (size_t)capacity * element_size;
8909}
8910static inline int
8911rb_darray_ensure_space(void *ptr_to_ary, size_t header_size, size_t element_size)
8912{
8913 rb_darray_meta_t **ptr_to_ptr_to_meta = ptr_to_ary;
8914 rb_darray_meta_t *meta = *ptr_to_ptr_to_meta;
8915 int32_t current_capa = rb_darray_capa(meta);
8916 if (rb_darray_size(meta) < current_capa) return 1;
8917 int32_t new_capa;
8918 if (current_capa == 0) {
8919 new_capa = 1;
8920 }
8921 else {
8922 int64_t doubled = 2 * (int64_t)current_capa;
8923 new_capa = (int32_t)doubled;
8924 if (new_capa != doubled) return 0;
8925 }
8926 size_t current_buffer_size = rb_darray_buffer_size(current_capa, header_size, element_size);
8927 size_t new_buffer_size = rb_darray_buffer_size(new_capa, header_size, element_size);
8928 if (new_buffer_size <= current_buffer_size) return 0;
8929 rb_darray_meta_t *doubled_ary = realloc(meta, new_buffer_size);
8930 if (!doubled_ary) return 0;
8931 if (meta == ((void *)0)) {
8932 doubled_ary->size = 0;
8933 }
8934 doubled_ary->capa = new_capa;
8935 ruby_nonempty_memcpy(ptr_to_ary, &doubled_ary, sizeof(doubled_ary));
8936 return 1;
8937}
8938static inline int
8939rb_darray_make_impl(void *ptr_to_ary, int32_t array_size, size_t header_size, size_t element_size)
8940{
8941 rb_darray_meta_t **ptr_to_ptr_to_meta = ptr_to_ary;
8942 if (array_size < 0) return 0;
8943 if (array_size == 0) {
8944 *ptr_to_ptr_to_meta = ((void *)0);
8945 return 1;
8946 }
8947 size_t buffer_size = rb_darray_buffer_size(array_size, header_size, element_size);
8948 rb_darray_meta_t *meta = calloc(buffer_size, 1);
8949 if (!meta) return 0;
8950 meta->size = array_size;
8951 meta->capa = array_size;
8952 ruby_nonempty_memcpy(ptr_to_ary, &meta, sizeof(meta));
8953 return 1;
8954}
8955struct sched_param
8956{
8957 int sched_priority;
8958};
8959
8960extern int clone (int (*__fn) (void *__arg), void *__child_stack,
8961 int __flags, void *__arg, ...) __attribute__ ((__nothrow__ , __leaf__));
8962extern int unshare (int __flags) __attribute__ ((__nothrow__ , __leaf__));
8963extern int sched_getcpu (void) __attribute__ ((__nothrow__ , __leaf__));
8964extern int getcpu (unsigned int *, unsigned int *) __attribute__ ((__nothrow__ , __leaf__));
8965extern int setns (int __fd, int __nstype) __attribute__ ((__nothrow__ , __leaf__));
8966
8967typedef unsigned long int __cpu_mask;
8968typedef struct
8969{
8970 __cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))];
8971} cpu_set_t;
8972
8973extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
8974 __attribute__ ((__nothrow__ , __leaf__));
8975extern cpu_set_t *__sched_cpualloc (size_t __count) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
8976extern void __sched_cpufree (cpu_set_t *__set) __attribute__ ((__nothrow__ , __leaf__));
8977
8978
8979extern int sched_setparam (__pid_t __pid, const struct sched_param *__param)
8980 __attribute__ ((__nothrow__ , __leaf__));
8981extern int sched_getparam (__pid_t __pid, struct sched_param *__param) __attribute__ ((__nothrow__ , __leaf__));
8982extern int sched_setscheduler (__pid_t __pid, int __policy,
8983 const struct sched_param *__param) __attribute__ ((__nothrow__ , __leaf__));
8984extern int sched_getscheduler (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));
8985extern int sched_yield (void) __attribute__ ((__nothrow__ , __leaf__));
8986extern int sched_get_priority_max (int __algorithm) __attribute__ ((__nothrow__ , __leaf__));
8987extern int sched_get_priority_min (int __algorithm) __attribute__ ((__nothrow__ , __leaf__));
8988extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __attribute__ ((__nothrow__ , __leaf__));
8989extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
8990 const cpu_set_t *__cpuset) __attribute__ ((__nothrow__ , __leaf__));
8991extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize,
8992 cpu_set_t *__cpuset) __attribute__ ((__nothrow__ , __leaf__));
8993
8994enum
8995{
8996 PTHREAD_CREATE_JOINABLE,
8997 PTHREAD_CREATE_DETACHED
8998};
8999enum
9000{
9001 PTHREAD_MUTEX_TIMED_NP,
9002 PTHREAD_MUTEX_RECURSIVE_NP,
9003 PTHREAD_MUTEX_ERRORCHECK_NP,
9004 PTHREAD_MUTEX_ADAPTIVE_NP
9005 ,
9006 PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
9007 PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
9008 PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
9009 PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
9010 , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP
9011};
9012enum
9013{
9014 PTHREAD_MUTEX_STALLED,
9015 PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED,
9016 PTHREAD_MUTEX_ROBUST,
9017 PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST
9018};
9019enum
9020{
9021 PTHREAD_PRIO_NONE,
9022 PTHREAD_PRIO_INHERIT,
9023 PTHREAD_PRIO_PROTECT
9024};
9025enum
9026{
9027 PTHREAD_RWLOCK_PREFER_READER_NP,
9028 PTHREAD_RWLOCK_PREFER_WRITER_NP,
9029 PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
9030 PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP
9031};
9032enum
9033{
9034 PTHREAD_INHERIT_SCHED,
9035 PTHREAD_EXPLICIT_SCHED
9036};
9037enum
9038{
9039 PTHREAD_SCOPE_SYSTEM,
9040 PTHREAD_SCOPE_PROCESS
9041};
9042enum
9043{
9044 PTHREAD_PROCESS_PRIVATE,
9045 PTHREAD_PROCESS_SHARED
9046};
9047struct _pthread_cleanup_buffer
9048{
9049 void (*__routine) (void *);
9050 void *__arg;
9051 int __canceltype;
9052 struct _pthread_cleanup_buffer *__prev;
9053};
9054enum
9055{
9056 PTHREAD_CANCEL_ENABLE,
9057 PTHREAD_CANCEL_DISABLE
9058};
9059enum
9060{
9061 PTHREAD_CANCEL_DEFERRED,
9062 PTHREAD_CANCEL_ASYNCHRONOUS
9063};
9064
9065extern int pthread_create (pthread_t *__restrict __newthread,
9066 const pthread_attr_t *__restrict __attr,
9067 void *(*__start_routine) (void *),
9068 void *__restrict __arg) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 3)));
9069extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__));
9070extern int pthread_join (pthread_t __th, void **__thread_return);
9071extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __attribute__ ((__nothrow__ , __leaf__));
9072extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return,
9073 const struct timespec *__abstime);
9074extern int pthread_clockjoin_np (pthread_t __th, void **__thread_return,
9075 clockid_t __clockid,
9076 const struct timespec *__abstime);
9077extern int pthread_detach (pthread_t __th) __attribute__ ((__nothrow__ , __leaf__));
9078extern pthread_t pthread_self (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
9079extern int pthread_equal (pthread_t __thread1, pthread_t __thread2)
9080 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
9081extern int pthread_attr_init (pthread_attr_t *__attr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9082extern int pthread_attr_destroy (pthread_attr_t *__attr)
9083 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9084extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
9085 int *__detachstate)
9086 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9087extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
9088 int __detachstate)
9089 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9090extern int pthread_attr_getguardsize (const pthread_attr_t *__attr,
9091 size_t *__guardsize)
9092 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9093extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
9094 size_t __guardsize)
9095 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9096extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr,
9097 struct sched_param *__restrict __param)
9098 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9099extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
9100 const struct sched_param *__restrict
9101 __param) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9102extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict
9103 __attr, int *__restrict __policy)
9104 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9105extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)
9106 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9107extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict
9108 __attr, int *__restrict __inherit)
9109 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9110extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
9111 int __inherit)
9112 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9113extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
9114 int *__restrict __scope)
9115 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9116extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope)
9117 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9118extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict
9119 __attr, void **__restrict __stackaddr)
9120 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__deprecated__));
9121extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
9122 void *__stackaddr)
9123 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__));
9124extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict
9125 __attr, size_t *__restrict __stacksize)
9126 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9127extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
9128 size_t __stacksize)
9129 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9130extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
9131 void **__restrict __stackaddr,
9132 size_t *__restrict __stacksize)
9133 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3)));
9134extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
9135 size_t __stacksize) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9136extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
9137 size_t __cpusetsize,
9138 const cpu_set_t *__cpuset)
9139 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
9140extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr,
9141 size_t __cpusetsize,
9142 cpu_set_t *__cpuset)
9143 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
9144extern int pthread_getattr_default_np (pthread_attr_t *__attr)
9145 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9146extern int pthread_attr_setsigmask_np (pthread_attr_t *__attr,
9147 const __sigset_t *sigmask);
9148extern int pthread_attr_getsigmask_np (const pthread_attr_t *__attr,
9149 __sigset_t *sigmask);
9150extern int pthread_setattr_default_np (const pthread_attr_t *__attr)
9151 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9152extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)
9153 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
9154extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
9155 const struct sched_param *__param)
9156 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
9157extern int pthread_getschedparam (pthread_t __target_thread,
9158 int *__restrict __policy,
9159 struct sched_param *__restrict __param)
9160 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
9161extern int pthread_setschedprio (pthread_t __target_thread, int __prio)
9162 __attribute__ ((__nothrow__ , __leaf__));
9163extern int pthread_getname_np (pthread_t __target_thread, char *__buf,
9164 size_t __buflen)
9165 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
9166extern int pthread_setname_np (pthread_t __target_thread, const char *__name)
9167 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
9168extern int pthread_getconcurrency (void) __attribute__ ((__nothrow__ , __leaf__));
9169extern int pthread_setconcurrency (int __level) __attribute__ ((__nothrow__ , __leaf__));
9170extern int pthread_yield (void) __attribute__ ((__nothrow__ , __leaf__));
9171extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize,
9172 const cpu_set_t *__cpuset)
9173 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
9174extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize,
9175 cpu_set_t *__cpuset)
9176 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
9177extern int pthread_once (pthread_once_t *__once_control,
9178 void (*__init_routine) (void)) __attribute__ ((__nonnull__ (1, 2)));
9179extern int pthread_setcancelstate (int __state, int *__oldstate);
9180extern int pthread_setcanceltype (int __type, int *__oldtype);
9181extern int pthread_cancel (pthread_t __th);
9182extern void pthread_testcancel (void);
9183struct __cancel_jmp_buf_tag
9184{
9185 __jmp_buf __cancel_jmp_buf;
9186 int __mask_was_saved;
9187};
9188typedef struct
9189{
9190 struct __cancel_jmp_buf_tag __cancel_jmp_buf[1];
9191 void *__pad[4];
9192} __pthread_unwind_buf_t __attribute__ ((__aligned__));
9193struct __pthread_cleanup_frame
9194{
9195 void (*__cancel_routine) (void *);
9196 void *__cancel_arg;
9197 int __do_it;
9198 int __cancel_type;
9199};
9200extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf)
9201 ;
9202extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf)
9203 ;
9204extern void __pthread_register_cancel_defer (__pthread_unwind_buf_t *__buf)
9205 ;
9206extern void __pthread_unregister_cancel_restore (__pthread_unwind_buf_t *__buf)
9207 ;
9208extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf)
9209 __attribute__ ((__noreturn__))
9210 __attribute__ ((__weak__))
9211 ;
9212extern int __sigsetjmp_cancel (struct __cancel_jmp_buf_tag __env[1], int __savemask) __asm__ ("" "__sigsetjmp") __attribute__ ((__nothrow__)) __attribute__ ((__returns_twice__));
9213extern int pthread_mutex_init (pthread_mutex_t *__mutex,
9214 const pthread_mutexattr_t *__mutexattr)
9215 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9216extern int pthread_mutex_destroy (pthread_mutex_t *__mutex)
9217 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9218extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
9219 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9220extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
9221 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9222extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
9223 const struct timespec *__restrict
9224 __abstime) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
9225extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex,
9226 clockid_t __clockid,
9227 const struct timespec *__restrict
9228 __abstime) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 3)));
9229extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
9230 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9231extern int pthread_mutex_getprioceiling (const pthread_mutex_t *
9232 __restrict __mutex,
9233 int *__restrict __prioceiling)
9234 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9235extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
9236 int __prioceiling,
9237 int *__restrict __old_ceiling)
9238 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
9239extern int pthread_mutex_consistent (pthread_mutex_t *__mutex)
9240 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9241extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
9242 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9243extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr)
9244 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9245extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr)
9246 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9247extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t *
9248 __restrict __attr,
9249 int *__restrict __pshared)
9250 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9251extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,
9252 int __pshared)
9253 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9254extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict
9255 __attr, int *__restrict __kind)
9256 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9257extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind)
9258 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9259extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *
9260 __restrict __attr,
9261 int *__restrict __protocol)
9262 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9263extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr,
9264 int __protocol)
9265 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9266extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *
9267 __restrict __attr,
9268 int *__restrict __prioceiling)
9269 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9270extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr,
9271 int __prioceiling)
9272 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9273extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr,
9274 int *__robustness)
9275 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9276extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr,
9277 int *__robustness)
9278 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9279extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr,
9280 int __robustness)
9281 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9282extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr,
9283 int __robustness)
9284 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9285extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
9286 const pthread_rwlockattr_t *__restrict
9287 __attr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9288extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock)
9289 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9290extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock)
9291 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9292extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
9293 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9294extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
9295 const struct timespec *__restrict
9296 __abstime) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
9297extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock,
9298 clockid_t __clockid,
9299 const struct timespec *__restrict
9300 __abstime) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 3)));
9301extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock)
9302 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9303extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
9304 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9305extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
9306 const struct timespec *__restrict
9307 __abstime) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
9308extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock,
9309 clockid_t __clockid,
9310 const struct timespec *__restrict
9311 __abstime) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 3)));
9312extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock)
9313 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9314extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr)
9315 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9316extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr)
9317 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9318extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *
9319 __restrict __attr,
9320 int *__restrict __pshared)
9321 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9322extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
9323 int __pshared)
9324 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9325extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t *
9326 __restrict __attr,
9327 int *__restrict __pref)
9328 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9329extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr,
9330 int __pref) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9331extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
9332 const pthread_condattr_t *__restrict __cond_attr)
9333 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9334extern int pthread_cond_destroy (pthread_cond_t *__cond)
9335 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9336extern int pthread_cond_signal (pthread_cond_t *__cond)
9337 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9338extern int pthread_cond_broadcast (pthread_cond_t *__cond)
9339 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9340extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
9341 pthread_mutex_t *__restrict __mutex)
9342 __attribute__ ((__nonnull__ (1, 2)));
9343extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
9344 pthread_mutex_t *__restrict __mutex,
9345 const struct timespec *__restrict __abstime)
9346 __attribute__ ((__nonnull__ (1, 2, 3)));
9347extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond,
9348 pthread_mutex_t *__restrict __mutex,
9349 __clockid_t __clock_id,
9350 const struct timespec *__restrict __abstime)
9351 __attribute__ ((__nonnull__ (1, 2, 4)));
9352extern int pthread_condattr_init (pthread_condattr_t *__attr)
9353 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9354extern int pthread_condattr_destroy (pthread_condattr_t *__attr)
9355 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9356extern int pthread_condattr_getpshared (const pthread_condattr_t *
9357 __restrict __attr,
9358 int *__restrict __pshared)
9359 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9360extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
9361 int __pshared) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9362extern int pthread_condattr_getclock (const pthread_condattr_t *
9363 __restrict __attr,
9364 __clockid_t *__restrict __clock_id)
9365 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9366extern int pthread_condattr_setclock (pthread_condattr_t *__attr,
9367 __clockid_t __clock_id)
9368 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9369extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
9370 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9371extern int pthread_spin_destroy (pthread_spinlock_t *__lock)
9372 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9373extern int pthread_spin_lock (pthread_spinlock_t *__lock)
9374 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9375extern int pthread_spin_trylock (pthread_spinlock_t *__lock)
9376 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9377extern int pthread_spin_unlock (pthread_spinlock_t *__lock)
9378 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9379extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
9380 const pthread_barrierattr_t *__restrict
9381 __attr, unsigned int __count)
9382 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9383extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
9384 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9385extern int pthread_barrier_wait (pthread_barrier_t *__barrier)
9386 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
9387extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr)
9388 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9389extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr)
9390 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9391extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *
9392 __restrict __attr,
9393 int *__restrict __pshared)
9394 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
9395extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
9396 int __pshared)
9397 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9398extern int pthread_key_create (pthread_key_t *__key,
9399 void (*__destr_function) (void *))
9400 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
9401extern int pthread_key_delete (pthread_key_t __key) __attribute__ ((__nothrow__ , __leaf__));
9402extern void *pthread_getspecific (pthread_key_t __key) __attribute__ ((__nothrow__ , __leaf__));
9403extern int pthread_setspecific (pthread_key_t __key,
9404 const void *__pointer) __attribute__ ((__nothrow__ , __leaf__)) ;
9405extern int pthread_getcpuclockid (pthread_t __thread_id,
9406 __clockid_t *__clock_id)
9407 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
9408extern int pthread_atfork (void (*__prepare) (void),
9409 void (*__parent) (void),
9410 void (*__child) (void)) __attribute__ ((__nothrow__ , __leaf__));
9411extern __inline __attribute__ ((__gnu_inline__)) int
9412__attribute__ ((__nothrow__ , __leaf__)) pthread_equal (pthread_t __thread1, pthread_t __thread2)
9413{
9414 return __thread1 == __thread2;
9415}
9416
9417typedef pthread_t rb_nativethread_id_t;
9418typedef pthread_mutex_t rb_nativethread_lock_t;
9419typedef pthread_cond_t rb_nativethread_cond_t;
9420
9421
9422rb_nativethread_id_t rb_nativethread_self(void);
9423void rb_nativethread_lock_initialize(rb_nativethread_lock_t *lock);
9424void rb_nativethread_lock_destroy(rb_nativethread_lock_t *lock);
9425void rb_nativethread_lock_lock(rb_nativethread_lock_t *lock);
9426void rb_nativethread_lock_unlock(rb_nativethread_lock_t *lock);
9427void rb_native_mutex_lock(rb_nativethread_lock_t *lock);
9428int rb_native_mutex_trylock(rb_nativethread_lock_t *lock);
9429void rb_native_mutex_unlock(rb_nativethread_lock_t *lock);
9430void rb_native_mutex_initialize(rb_nativethread_lock_t *lock);
9431void rb_native_mutex_destroy(rb_nativethread_lock_t *lock);
9432void rb_native_cond_signal(rb_nativethread_cond_t *cond);
9433void rb_native_cond_broadcast(rb_nativethread_cond_t *cond);
9434void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex);
9435void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec);
9436void rb_native_cond_initialize(rb_nativethread_cond_t *cond);
9437void rb_native_cond_destroy(rb_nativethread_cond_t *cond);
9438
9439
9440typedef struct native_thread_data_struct {
9441 union {
9442 struct list_node ubf;
9443 struct list_node gvl;
9444 } node;
9445 union
9446 {
9447 rb_nativethread_cond_t intr;
9448 rb_nativethread_cond_t gvlq;
9449 } cond;
9450} native_thread_data_t;
9451typedef struct rb_global_vm_lock_struct {
9452 const struct rb_thread_struct *owner;
9453 rb_nativethread_lock_t lock;
9454 struct list_head waitq;
9455 const struct rb_thread_struct *timer;
9456 int timer_err;
9457 rb_nativethread_cond_t switch_cond;
9458 rb_nativethread_cond_t switch_wait_cond;
9459 int need_yield;
9460 int wait_yield;
9461} rb_global_vm_lock_t;
9462
9463
9464 extern __thread struct rb_execution_context_struct *ruby_current_ec;
9465
9466
9467void *rb_allocate_sigaltstack(void);
9468void *rb_register_sigaltstack(void *);
9469void rb_vm_encoded_insn_data_table_init(void);
9470typedef unsigned long rb_num_t;
9471typedef signed long rb_snum_t;
9472enum ruby_tag_type {
9473 RUBY_TAG_NONE = 0x0,
9474 RUBY_TAG_RETURN = 0x1,
9475 RUBY_TAG_BREAK = 0x2,
9476 RUBY_TAG_NEXT = 0x3,
9477 RUBY_TAG_RETRY = 0x4,
9478 RUBY_TAG_REDO = 0x5,
9479 RUBY_TAG_RAISE = 0x6,
9480 RUBY_TAG_THROW = 0x7,
9481 RUBY_TAG_FATAL = 0x8,
9482 RUBY_TAG_MASK = 0xf
9483};
9484enum ruby_vm_throw_flags {
9485 VM_THROW_NO_ESCAPE_FLAG = 0x8000,
9486 VM_THROW_STATE_MASK = 0xff
9487};
9488struct rb_thread_struct;
9489struct rb_control_frame_struct;
9490typedef struct rb_compile_option_struct rb_compile_option_t;
9491union ic_serial_entry {
9492 rb_serial_t raw;
9493 VALUE data[2];
9494};
9495struct iseq_inline_constant_cache_entry {
9496 VALUE flags;
9497 VALUE value;
9498 union ic_serial_entry ic_serial;
9499 const rb_cref_t *ic_cref;
9500};
9501__extension__ _Static_assert((__builtin_offsetof (struct iseq_inline_constant_cache_entry, ic_cref) + sizeof(const rb_cref_t *)) <= sizeof(struct RObject), "sizeof_iseq_inline_constant_cache_entry" ": " "(offsetof(struct iseq_inline_constant_cache_entry, ic_cref) + sizeof(const rb_cref_t *)) <= sizeof(struct RObject)");
9502struct iseq_inline_constant_cache {
9503 struct iseq_inline_constant_cache_entry *entry;
9504 unsigned get_insn_idx;
9505};
9506struct iseq_inline_iv_cache_entry {
9507 struct rb_iv_index_tbl_entry *entry;
9508};
9509struct iseq_inline_cvar_cache_entry {
9510 struct rb_cvar_class_tbl_entry *entry;
9511};
9512union iseq_inline_storage_entry {
9513 struct {
9514 struct rb_thread_struct *running_thread;
9515 VALUE value;
9516 } once;
9517 struct iseq_inline_constant_cache ic_cache;
9518 struct iseq_inline_iv_cache_entry iv_cache;
9519};
9520struct rb_calling_info {
9521 const struct rb_callinfo *ci;
9522 const struct rb_callcache *cc;
9523 VALUE block_handler;
9524 VALUE recv;
9525 int argc;
9526 int kw_splat;
9527};
9528struct rb_execution_context_struct;
9529typedef struct rb_iseq_location_struct {
9530 VALUE pathobj;
9531 VALUE base_label;
9532 VALUE label;
9533 VALUE first_lineno;
9534 int node_id;
9535 rb_code_location_t code_location;
9536} rb_iseq_location_t;
9537static inline VALUE
9538pathobj_path(VALUE pathobj)
9539{
9540 if (RB_TYPE_P(pathobj, RUBY_T_STRING)) {
9541 return pathobj;
9542 }
9543 else {
9544 ((void)0);
9545 return RARRAY_AREF(pathobj, 0);
9546 }
9547}
9548static inline VALUE
9549pathobj_realpath(VALUE pathobj)
9550{
9551 if (RB_TYPE_P(pathobj, RUBY_T_STRING)) {
9552 return pathobj;
9553 }
9554 else {
9555 ((void)0);
9556 return RARRAY_AREF(pathobj, 1);
9557 }
9558}
9559struct rb_mjit_unit;
9560typedef struct { rb_darray_meta_t meta; struct yjit_block_version * data[]; } * rb_yjit_block_array_t;
9561typedef struct { rb_darray_meta_t meta; rb_yjit_block_array_t data[]; } * rb_yjit_block_array_array_t;
9562struct rb_iseq_constant_body {
9563 enum iseq_type {
9564 ISEQ_TYPE_TOP,
9565 ISEQ_TYPE_METHOD,
9566 ISEQ_TYPE_BLOCK,
9567 ISEQ_TYPE_CLASS,
9568 ISEQ_TYPE_RESCUE,
9569 ISEQ_TYPE_ENSURE,
9570 ISEQ_TYPE_EVAL,
9571 ISEQ_TYPE_MAIN,
9572 ISEQ_TYPE_PLAIN
9573 } type;
9574 unsigned int iseq_size;
9575 VALUE *iseq_encoded;
9576 struct {
9577 struct {
9578 unsigned int has_lead : 1;
9579 unsigned int has_opt : 1;
9580 unsigned int has_rest : 1;
9581 unsigned int has_post : 1;
9582 unsigned int has_kw : 1;
9583 unsigned int has_kwrest : 1;
9584 unsigned int has_block : 1;
9585 unsigned int ambiguous_param0 : 1;
9586 unsigned int accepts_no_kwarg : 1;
9587 unsigned int ruby2_keywords: 1;
9588 } flags;
9589 unsigned int size;
9590 int lead_num;
9591 int opt_num;
9592 int rest_start;
9593 int post_start;
9594 int post_num;
9595 int block_start;
9596 const VALUE *opt_table;
9597 const struct rb_iseq_param_keyword {
9598 int num;
9599 int required_num;
9600 int bits_start;
9601 int rest_start;
9602 const ID *table;
9603 VALUE *default_values;
9604 } *keyword;
9605 } param;
9606 rb_iseq_location_t location;
9607 struct iseq_insn_info {
9608 const struct iseq_insn_info_entry *body;
9609 unsigned int *positions;
9610 unsigned int size;
9611 struct succ_index_table *succ_index_table;
9612 } insns_info;
9613 const ID *local_table;
9614 struct iseq_catch_table *catch_table;
9615 const struct rb_iseq_struct *parent_iseq;
9616 struct rb_iseq_struct *local_iseq;
9617 union iseq_inline_storage_entry *is_entries;
9618 struct rb_call_data *call_data;
9619 struct {
9620 rb_snum_t flip_count;
9621 VALUE script_lines;
9622 VALUE coverage;
9623 VALUE pc2branchindex;
9624 VALUE *original_iseq;
9625 } variable;
9626 unsigned int local_table_size;
9627 unsigned int is_size;
9628 unsigned int ci_size;
9629 unsigned int stack_max;
9630 char catch_except_p;
9631 _Bool builtin_inline_p;
9632 struct rb_id_table *outer_variables;
9633 const rb_iseq_t *mandatory_only_iseq;
9634 VALUE (*jit_func)(struct rb_execution_context_struct *,
9635 struct rb_control_frame_struct *);
9636 long unsigned total_calls;
9637 struct rb_mjit_unit *jit_unit;
9638 rb_yjit_block_array_array_t yjit_blocks;
9639};
9640struct rb_iseq_struct {
9641 VALUE flags;
9642 VALUE wrapper;
9643 struct rb_iseq_constant_body *body;
9644 union {
9645 struct iseq_compile_data *compile_data;
9646 struct {
9647 VALUE obj;
9648 int index;
9649 } loader;
9650 struct {
9651 struct rb_hook_list_struct *local_hooks;
9652 rb_event_flag_t global_trace_events;
9653 } exec;
9654 } aux;
9655};
9656static inline const rb_iseq_t *
9657rb_iseq_check(const rb_iseq_t *iseq)
9658{
9659 return iseq;
9660}
9661static inline const rb_iseq_t *
9662def_iseq_ptr(rb_method_definition_t *def)
9663{
9664 return rb_iseq_check(def->body.iseq.iseqptr);
9665}
9666enum ruby_special_exceptions {
9667 ruby_error_reenter,
9668 ruby_error_nomemory,
9669 ruby_error_sysstack,
9670 ruby_error_stackfatal,
9671 ruby_error_stream_closed,
9672 ruby_special_error_count
9673};
9674enum ruby_basic_operators {
9675 BOP_PLUS,
9676 BOP_MINUS,
9677 BOP_MULT,
9678 BOP_DIV,
9679 BOP_MOD,
9680 BOP_EQ,
9681 BOP_EQQ,
9682 BOP_LT,
9683 BOP_LE,
9684 BOP_LTLT,
9685 BOP_AREF,
9686 BOP_ASET,
9687 BOP_LENGTH,
9688 BOP_SIZE,
9689 BOP_EMPTY_P,
9690 BOP_NIL_P,
9691 BOP_SUCC,
9692 BOP_GT,
9693 BOP_GE,
9694 BOP_NOT,
9695 BOP_NEQ,
9696 BOP_MATCH,
9697 BOP_FREEZE,
9698 BOP_UMINUS,
9699 BOP_MAX,
9700 BOP_MIN,
9701 BOP_CALL,
9702 BOP_AND,
9703 BOP_OR,
9704 BOP_LAST_
9705};
9706struct rb_vm_struct;
9707typedef void rb_vm_at_exit_func(struct rb_vm_struct*);
9708typedef struct rb_at_exit_list {
9709 rb_vm_at_exit_func *func;
9710 struct rb_at_exit_list *next;
9711} rb_at_exit_list;
9712struct rb_objspace;
9713struct rb_objspace *rb_objspace_alloc(void);
9714void rb_objspace_free(struct rb_objspace *);
9715void rb_objspace_call_finalizer(struct rb_objspace *);
9716typedef struct rb_hook_list_struct {
9717 struct rb_event_hook_struct *hooks;
9718 rb_event_flag_t events;
9719 unsigned int running;
9720 _Bool need_clean;
9721 _Bool is_local;
9722} rb_hook_list_t;
9723typedef const struct rb_builtin_function *RB_BUILTIN;
9724typedef struct rb_vm_struct {
9725 VALUE self;
9726 struct {
9727 struct list_head set;
9728 unsigned int cnt;
9729 unsigned int blocking_cnt;
9730 struct rb_ractor_struct *main_ractor;
9731 struct rb_thread_struct *main_thread;
9732 struct {
9733 rb_nativethread_lock_t lock;
9734 struct rb_ractor_struct *lock_owner;
9735 unsigned int lock_rec;
9736 _Bool barrier_waiting;
9737 unsigned int barrier_cnt;
9738 rb_nativethread_cond_t barrier_cond;
9739 rb_nativethread_cond_t terminate_cond;
9740 _Bool terminate_waiting;
9741 } sync;
9742 } ractor;
9743 void *main_altstack;
9744 rb_serial_t fork_gen;
9745 rb_nativethread_lock_t waitpid_lock;
9746 struct list_head waiting_pids;
9747 struct list_head waiting_grps;
9748 struct list_head waiting_fds;
9749 volatile int ubf_async_safe;
9750 unsigned int running: 1;
9751 unsigned int thread_abort_on_exception: 1;
9752 unsigned int thread_report_on_exception: 1;
9753 unsigned int thread_ignore_deadlock: 1;
9754 VALUE mark_object_ary;
9755 const VALUE special_exceptions[ruby_special_error_count];
9756 VALUE top_self;
9757 VALUE load_path;
9758 VALUE load_path_snapshot;
9759 VALUE load_path_check_cache;
9760 VALUE expanded_load_path;
9761 VALUE loaded_features;
9762 VALUE loaded_features_snapshot;
9763 VALUE loaded_features_realpaths;
9764 struct st_table *loaded_features_index;
9765 struct st_table *loading_table;
9766 struct {
9767 VALUE cmd[(64 + 1)];
9768 } trap_list;
9769 struct st_table *ensure_rollback_table;
9770 struct rb_postponed_job_struct *postponed_job_buffer;
9771 rb_atomic_t postponed_job_index;
9772 int src_encoding_index;
9773 struct list_head workqueue;
9774 rb_nativethread_lock_t workqueue_lock;
9775 VALUE orig_progname, progname;
9776 VALUE coverages, me2counter;
9777 int coverage_mode;
9778 st_table * defined_module_hash;
9779 struct rb_objspace *objspace;
9780 rb_at_exit_list *at_exit;
9781 st_table *frozen_strings;
9782 const struct rb_builtin_function *builtin_function_table;
9783 int builtin_inline_index;
9784 struct rb_id_table *negative_cme_table;
9785 st_table *overloaded_cme_table;
9786 const struct rb_callcache *global_cc_cache_table[1023];
9787 struct {
9788 size_t thread_vm_stack_size;
9789 size_t thread_machine_stack_size;
9790 size_t fiber_vm_stack_size;
9791 size_t fiber_machine_stack_size;
9792 } default_params;
9793 short redefined_flag[BOP_LAST_];
9794} rb_vm_t;
9795struct rb_captured_block {
9796 VALUE self;
9797 const VALUE *ep;
9798 union {
9799 const rb_iseq_t *iseq;
9800 const struct vm_ifunc *ifunc;
9801 VALUE val;
9802 } code;
9803};
9804enum rb_block_handler_type {
9805 block_handler_type_iseq,
9806 block_handler_type_ifunc,
9807 block_handler_type_symbol,
9808 block_handler_type_proc
9809};
9810enum rb_block_type {
9811 block_type_iseq,
9812 block_type_ifunc,
9813 block_type_symbol,
9814 block_type_proc
9815};
9816struct rb_block {
9817 union {
9818 struct rb_captured_block captured;
9819 VALUE symbol;
9820 VALUE proc;
9821 } as;
9822 enum rb_block_type type;
9823};
9824typedef struct rb_control_frame_struct {
9825 const VALUE *pc;
9826 VALUE *sp;
9827 const rb_iseq_t *iseq;
9828 VALUE self;
9829 const VALUE *ep;
9830 const void *block_code;
9831 VALUE *__bp__;
9832 void *jit_return;
9833} rb_control_frame_t;
9834extern const rb_data_type_t ruby_threadptr_data_type;
9835static inline struct rb_thread_struct *
9836rb_thread_ptr(VALUE thval)
9837{
9838 return (struct rb_thread_struct *)rb_check_typeddata(thval, &ruby_threadptr_data_type);
9839}
9840enum rb_thread_status {
9841 THREAD_RUNNABLE,
9842 THREAD_STOPPED,
9843 THREAD_STOPPED_FOREVER,
9844 THREAD_KILLED
9845};
9846typedef void *rb_jmpbuf_t[5];
9847struct rb_vm_tag {
9848 VALUE tag;
9849 VALUE retval;
9850 rb_jmpbuf_t buf;
9851 struct rb_vm_tag *prev;
9852 enum ruby_tag_type state;
9853 unsigned int lock_rec;
9854};
9855__extension__ _Static_assert(__builtin_offsetof (struct rb_vm_tag, buf) > 0, "rb_vm_tag_buf_offset" ": " "offsetof(struct rb_vm_tag, buf) > 0");
9856__extension__ _Static_assert(__builtin_offsetof (struct rb_vm_tag, buf) + sizeof(rb_jmpbuf_t) < sizeof(struct rb_vm_tag), "rb_vm_tag_buf_end" ": " "offsetof(struct rb_vm_tag, buf) + sizeof(rb_jmpbuf_t) < sizeof(struct rb_vm_tag)");
9857struct rb_unblock_callback {
9858 rb_unblock_function_t *func;
9859 void *arg;
9860};
9861struct rb_mutex_struct;
9862typedef struct rb_ensure_entry {
9863 VALUE marker;
9864 VALUE (*e_proc)(VALUE);
9865 VALUE data2;
9866} rb_ensure_entry_t;
9867typedef struct rb_ensure_list {
9868 struct rb_ensure_list *next;
9869 struct rb_ensure_entry entry;
9870} rb_ensure_list_t;
9871typedef char rb_thread_id_string_t[sizeof(rb_nativethread_id_t) * 2 + 3];
9872typedef struct rb_fiber_struct rb_fiber_t;
9873struct rb_waiting_list {
9874 struct rb_waiting_list *next;
9875 struct rb_thread_struct *thread;
9876 struct rb_fiber_struct *fiber;
9877};
9878struct rb_execution_context_struct {
9879 VALUE *vm_stack;
9880 size_t vm_stack_size;
9881 rb_control_frame_t *cfp;
9882 struct rb_vm_tag *tag;
9883 rb_atomic_t interrupt_flag;
9884 rb_atomic_t interrupt_mask;
9885 rb_fiber_t *fiber_ptr;
9886 struct rb_thread_struct *thread_ptr;
9887 struct rb_id_table *local_storage;
9888 VALUE local_storage_recursive_hash;
9889 VALUE local_storage_recursive_hash_for_trace;
9890 const VALUE *root_lep;
9891 VALUE root_svar;
9892 rb_ensure_list_t *ensure_list;
9893 struct rb_trace_arg_struct *trace_arg;
9894 VALUE errinfo;
9895 VALUE passed_block_handler;
9896 uint8_t raised_flag;
9897 enum method_missing_reason method_missing_reason : 8;
9898 VALUE private_const_reference;
9899 struct {
9900 VALUE *stack_start;
9901 VALUE *stack_end;
9902 size_t stack_maxsize;
9903 __attribute__((__aligned__(8))) jmp_buf regs;
9904 } machine;
9905};
9906typedef struct rb_execution_context_struct rb_execution_context_t;
9907void rb_ec_set_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size);
9908void rb_ec_initialize_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size);
9909void rb_ec_clear_vm_stack(rb_execution_context_t *ec);
9910struct rb_ext_config {
9911 _Bool ractor_safe;
9912};
9913typedef struct rb_ractor_struct rb_ractor_t;
9914typedef struct rb_thread_struct {
9915 struct list_node lt_node;
9916 VALUE self;
9917 rb_ractor_t *ractor;
9918 rb_vm_t *vm;
9919 rb_execution_context_t *ec;
9920 VALUE last_status;
9921 struct rb_calling_info *calling;
9922 VALUE top_self;
9923 VALUE top_wrapper;
9924 rb_nativethread_id_t thread_id;
9925 int tid;
9926 enum rb_thread_status status : 2;
9927 unsigned int to_kill : 1;
9928 unsigned int abort_on_exception: 1;
9929 unsigned int report_on_exception: 1;
9930 unsigned int pending_interrupt_queue_checked: 1;
9931 int8_t priority;
9932 uint32_t running_time_us;
9933 native_thread_data_t native_thread_data;
9934 void *blocking_region_buffer;
9935 VALUE thgroup;
9936 VALUE value;
9937 VALUE pending_interrupt_queue;
9938 VALUE pending_interrupt_mask_stack;
9939 rb_nativethread_lock_t interrupt_lock;
9940 struct rb_unblock_callback unblock;
9941 VALUE locking_mutex;
9942 struct rb_mutex_struct *keeping_mutexes;
9943 struct rb_waiting_list *join_list;
9944 union {
9945 struct {
9946 VALUE proc;
9947 VALUE args;
9948 int kw_splat;
9949 } proc;
9950 struct {
9951 VALUE (*func)(void *);
9952 void *arg;
9953 } func;
9954 } invoke_arg;
9955 enum thread_invoke_type {
9956 thread_invoke_type_none = 0,
9957 thread_invoke_type_proc,
9958 thread_invoke_type_ractor_proc,
9959 thread_invoke_type_func
9960 } invoke_type;
9961 VALUE stat_insn_usage;
9962 rb_fiber_t *root_fiber;
9963 VALUE scheduler;
9964 unsigned blocking;
9965 VALUE name;
9966 struct rb_ext_config ext_config;
9967 void *altstack;
9968} rb_thread_t;
9969typedef enum {
9970 VM_DEFINECLASS_TYPE_CLASS = 0x00,
9971 VM_DEFINECLASS_TYPE_SINGLETON_CLASS = 0x01,
9972 VM_DEFINECLASS_TYPE_MODULE = 0x02,
9973 VM_DEFINECLASS_TYPE_MASK = 0x07
9974} rb_vm_defineclass_type_t;
9975
9976
9977rb_iseq_t *rb_iseq_new (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent, enum iseq_type);
9978rb_iseq_t *rb_iseq_new_top (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent);
9979rb_iseq_t *rb_iseq_new_main (const rb_ast_body_t *ast, VALUE path, VALUE realpath, const rb_iseq_t *parent, int opt);
9980rb_iseq_t *rb_iseq_new_eval (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, VALUE first_lineno, const rb_iseq_t *parent, int isolated_depth);
9981rb_iseq_t *rb_iseq_new_with_opt(const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, VALUE first_lineno, const rb_iseq_t *parent, int isolated_depth,
9982 enum iseq_type, const rb_compile_option_t*);
9983struct iseq_link_anchor;
9984struct rb_iseq_new_with_callback_callback_func {
9985 VALUE flags;
9986 VALUE reserved;
9987 void (*func)(rb_iseq_t *, struct iseq_link_anchor *, const void *);
9988 const void *data;
9989};
9990static inline struct rb_iseq_new_with_callback_callback_func *
9991rb_iseq_new_with_callback_new_callback(
9992 void (*func)(rb_iseq_t *, struct iseq_link_anchor *, const void *), const void *ptr)
9993{
9994 VALUE memo = rb_imemo_new(imemo_ifunc, (VALUE)func, (VALUE)ptr, ((VALUE)RUBY_Qundef), ((VALUE)RUBY_Qfalse));
9995 return (struct rb_iseq_new_with_callback_callback_func *)memo;
9996}
9997rb_iseq_t *rb_iseq_new_with_callback(const struct rb_iseq_new_with_callback_callback_func * ifunc,
9998 VALUE name, VALUE path, VALUE realpath, VALUE first_lineno,
9999 const rb_iseq_t *parent, enum iseq_type, const rb_compile_option_t*);
10000VALUE rb_iseq_disasm(const rb_iseq_t *iseq);
10001int rb_iseq_disasm_insn(VALUE str, const VALUE *iseqval, size_t pos, const rb_iseq_t *iseq, VALUE child);
10002VALUE rb_iseq_coverage(const rb_iseq_t *iseq);
10003extern VALUE rb_cISeq;
10004extern VALUE rb_cRubyVM;
10005extern VALUE rb_mRubyVMFrozenCore;
10006extern VALUE rb_block_param_proxy;
10007
10008
10009typedef struct {
10010 const struct rb_block block;
10011 unsigned int is_from_method: 1;
10012 unsigned int is_lambda: 1;
10013 unsigned int is_isolated: 1;
10014} rb_proc_t;
10015
10016
10017VALUE rb_proc_isolate(VALUE self);
10018VALUE rb_proc_isolate_bang(VALUE self);
10019VALUE rb_proc_ractor_make_shareable(VALUE self);
10020
10021
10022typedef struct {
10023 VALUE flags;
10024 rb_iseq_t *iseq;
10025 const VALUE *ep;
10026 const VALUE *env;
10027 unsigned int env_size;
10028} rb_env_t;
10029extern const rb_data_type_t ruby_binding_data_type;
10030typedef struct {
10031 const struct rb_block block;
10032 const VALUE pathobj;
10033 unsigned short first_lineno;
10034} rb_binding_t;
10035enum vm_check_match_type {
10036 VM_CHECKMATCH_TYPE_WHEN = 1,
10037 VM_CHECKMATCH_TYPE_CASE = 2,
10038 VM_CHECKMATCH_TYPE_RESCUE = 3
10039};
10040enum vm_special_object_type {
10041 VM_SPECIAL_OBJECT_VMCORE = 1,
10042 VM_SPECIAL_OBJECT_CBASE,
10043 VM_SPECIAL_OBJECT_CONST_BASE
10044};
10045enum vm_svar_index {
10046 VM_SVAR_LASTLINE = 0,
10047 VM_SVAR_BACKREF = 1,
10048 VM_SVAR_EXTRA_START = 2,
10049 VM_SVAR_FLIPFLOP_START = 2
10050};
10051typedef struct iseq_inline_constant_cache *IC;
10052typedef struct iseq_inline_iv_cache_entry *IVC;
10053typedef struct iseq_inline_cvar_cache_entry *ICVARC;
10054typedef union iseq_inline_storage_entry *ISE;
10055typedef const struct rb_callinfo *CALL_INFO;
10056typedef const struct rb_callcache *CALL_CACHE;
10057typedef struct rb_call_data *CALL_DATA;
10058typedef VALUE CDHASH;
10059typedef rb_control_frame_t *
10060 (*rb_insn_func_t)(rb_execution_context_t *, rb_control_frame_t *);
10061enum {
10062 VM_FRAME_MAGIC_METHOD = 0x11110001,
10063 VM_FRAME_MAGIC_BLOCK = 0x22220001,
10064 VM_FRAME_MAGIC_CLASS = 0x33330001,
10065 VM_FRAME_MAGIC_TOP = 0x44440001,
10066 VM_FRAME_MAGIC_CFUNC = 0x55550001,
10067 VM_FRAME_MAGIC_IFUNC = 0x66660001,
10068 VM_FRAME_MAGIC_EVAL = 0x77770001,
10069 VM_FRAME_MAGIC_RESCUE = 0x78880001,
10070 VM_FRAME_MAGIC_DUMMY = 0x79990001,
10071 VM_FRAME_MAGIC_MASK = 0x7fff0001,
10072 VM_FRAME_FLAG_FINISH = 0x0020,
10073 VM_FRAME_FLAG_BMETHOD = 0x0040,
10074 VM_FRAME_FLAG_CFRAME = 0x0080,
10075 VM_FRAME_FLAG_LAMBDA = 0x0100,
10076 VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM = 0x0200,
10077 VM_FRAME_FLAG_CFRAME_KW = 0x0400,
10078 VM_FRAME_FLAG_PASSED = 0x0800,
10079 VM_ENV_FLAG_LOCAL = 0x0002,
10080 VM_ENV_FLAG_ESCAPED = 0x0004,
10081 VM_ENV_FLAG_WB_REQUIRED = 0x0008,
10082 VM_ENV_FLAG_ISOLATED = 0x0010,
10083};
10084static inline void VM_FORCE_WRITE_SPECIAL_CONST(const VALUE *ptr, VALUE special_const_value);
10085static inline void
10086VM_ENV_FLAGS_SET(const VALUE *ep, VALUE flag)
10087{
10088 VALUE flags = ep[( 0)];
10089 ((void)0);
10090 VM_FORCE_WRITE_SPECIAL_CONST(&ep[( 0)], flags | flag);
10091}
10092static inline void
10093VM_ENV_FLAGS_UNSET(const VALUE *ep, VALUE flag)
10094{
10095 VALUE flags = ep[( 0)];
10096 ((void)0);
10097 VM_FORCE_WRITE_SPECIAL_CONST(&ep[( 0)], flags & ~flag);
10098}
10099static inline unsigned long
10100VM_ENV_FLAGS(const VALUE *ep, long flag)
10101{
10102 VALUE flags = ep[( 0)];
10103 ((void)0);
10104 return flags & flag;
10105}
10106static inline unsigned long
10107VM_FRAME_TYPE(const rb_control_frame_t *cfp)
10108{
10109 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_MAGIC_MASK);
10110}
10111static inline int
10112VM_FRAME_LAMBDA_P(const rb_control_frame_t *cfp)
10113{
10114 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_LAMBDA) != 0;
10115}
10116static inline int
10117VM_FRAME_CFRAME_KW_P(const rb_control_frame_t *cfp)
10118{
10119 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_CFRAME_KW) != 0;
10120}
10121static inline int
10122VM_FRAME_FINISHED_P(const rb_control_frame_t *cfp)
10123{
10124 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_FINISH) != 0;
10125}
10126static inline int
10127VM_FRAME_BMETHOD_P(const rb_control_frame_t *cfp)
10128{
10129 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_BMETHOD) != 0;
10130}
10131static inline int
10132rb_obj_is_iseq(VALUE iseq)
10133{
10134 return imemo_type_p(iseq, imemo_iseq);
10135}
10136static inline int
10137VM_FRAME_CFRAME_P(const rb_control_frame_t *cfp)
10138{
10139 int cframe_p = VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_CFRAME) != 0;
10140 ((void)0);
10141 return cframe_p;
10142}
10143static inline int
10144VM_FRAME_RUBYFRAME_P(const rb_control_frame_t *cfp)
10145{
10146 return !VM_FRAME_CFRAME_P(cfp);
10147}
10148static inline int
10149VM_ENV_LOCAL_P(const VALUE *ep)
10150{
10151 return VM_ENV_FLAGS(ep, VM_ENV_FLAG_LOCAL) ? 1 : 0;
10152}
10153static inline const VALUE *
10154VM_ENV_PREV_EP(const VALUE *ep)
10155{
10156 ((void)0);
10157 return ((void *)(((ep[(-1)])) & ~0x03));
10158}
10159static inline VALUE
10160VM_ENV_BLOCK_HANDLER(const VALUE *ep)
10161{
10162 ((void)0);
10163 return ep[(-1)];
10164}
10165static inline int
10166VM_ENV_ESCAPED_P(const VALUE *ep)
10167{
10168 ((void)0);
10169 return VM_ENV_FLAGS(ep, VM_ENV_FLAG_ESCAPED) ? 1 : 0;
10170}
10171__attribute__((__nonnull__ (1)))
10172static inline VALUE
10173VM_ENV_ENVVAL(const VALUE *ep)
10174{
10175 VALUE envval = ep[( 1)];
10176 ((void)0);
10177 ((void)0);
10178 return envval;
10179}
10180__attribute__((__nonnull__ (1)))
10181static inline const rb_env_t *
10182VM_ENV_ENVVAL_PTR(const VALUE *ep)
10183{
10184 return (const rb_env_t *)VM_ENV_ENVVAL(ep);
10185}
10186static inline const rb_env_t *
10187vm_env_new(VALUE *env_ep, VALUE *env_body, unsigned int env_size, const rb_iseq_t *iseq)
10188{
10189 rb_env_t *env = (rb_env_t *)rb_imemo_new(imemo_env, (VALUE)env_ep, (VALUE)env_body, 0, (VALUE)iseq);
10190 env->env_size = env_size;
10191 env_ep[( 1)] = (VALUE)env;
10192 return env;
10193}
10194static inline void
10195VM_FORCE_WRITE(const VALUE *ptr, VALUE v)
10196{
10197 *((VALUE *)ptr) = v;
10198}
10199static inline void
10200VM_FORCE_WRITE_SPECIAL_CONST(const VALUE *ptr, VALUE special_const_value)
10201{
10202 ((void)0);
10203 VM_FORCE_WRITE(ptr, special_const_value);
10204}
10205static inline void
10206VM_STACK_ENV_WRITE(const VALUE *ep, int index, VALUE v)
10207{
10208 ((void)0);
10209 VM_FORCE_WRITE(&ep[index], v);
10210}static inline
10211const VALUE *rb_vm_ep_local_ep(const VALUE *ep);
10212const VALUE *rb_vm_proc_local_ep(VALUE proc);static inline
10213void rb_vm_block_ep_update(VALUE obj, const struct rb_block *dst, const VALUE *ep);
10214void rb_vm_block_copy(VALUE obj, const struct rb_block *dst, const struct rb_block *src);static inline
10215VALUE rb_vm_frame_block_handler(const rb_control_frame_t *cfp);
10216static inline const rb_control_frame_t *
10217RUBY_VM_END_CONTROL_FRAME(const rb_execution_context_t *ec)
10218{
10219 return (rb_control_frame_t *)(ec->vm_stack + ec->vm_stack_size);
10220}
10221static inline int
10222RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
10223{
10224 return !((void *)(RUBY_VM_END_CONTROL_FRAME(ec)) > (void *)(cfp));
10225}
10226static inline int
10227VM_BH_ISEQ_BLOCK_P(VALUE block_handler)
10228{
10229 if ((block_handler & 0x03) == 0x01) {
10230 return 1;
10231 }
10232 else {
10233 return 0;
10234 }
10235}
10236static inline VALUE
10237VM_BH_FROM_ISEQ_BLOCK(const struct rb_captured_block *captured)
10238{
10239 VALUE block_handler = ((VALUE)(captured) | (0x01));
10240 ((void)0);
10241 return block_handler;
10242}
10243static inline const struct rb_captured_block *
10244VM_BH_TO_ISEQ_BLOCK(VALUE block_handler)
10245{
10246 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
10247 ((void)0);
10248 return captured;
10249}
10250static inline int
10251VM_BH_IFUNC_P(VALUE block_handler)
10252{
10253 if ((block_handler & 0x03) == 0x03) {
10254 return 1;
10255 }
10256 else {
10257 return 0;
10258 }
10259}
10260static inline VALUE
10261VM_BH_FROM_IFUNC_BLOCK(const struct rb_captured_block *captured)
10262{
10263 VALUE block_handler = ((VALUE)(captured) | (0x03));
10264 ((void)0);
10265 return block_handler;
10266}
10267static inline const struct rb_captured_block *
10268VM_BH_TO_IFUNC_BLOCK(VALUE block_handler)
10269{
10270 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
10271 ((void)0);
10272 return captured;
10273}
10274static inline const struct rb_captured_block *
10275VM_BH_TO_CAPT_BLOCK(VALUE block_handler)
10276{
10277 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
10278 ((void)0);
10279 return captured;
10280}
10281static inline enum rb_block_handler_type
10282vm_block_handler_type(VALUE block_handler)
10283{
10284 if (VM_BH_ISEQ_BLOCK_P(block_handler)) {
10285 return block_handler_type_iseq;
10286 }
10287 else if (VM_BH_IFUNC_P(block_handler)) {
10288 return block_handler_type_ifunc;
10289 }
10290 else if (RB_SYMBOL_P(block_handler)) {
10291 return block_handler_type_symbol;
10292 }
10293 else {
10294 ((void)0);
10295 return block_handler_type_proc;
10296 }
10297}
10298static inline void
10299vm_block_handler_verify(__attribute__ ((__unused__)) VALUE block_handler)
10300{
10301 ((void)0);
10302}
10303static inline int
10304vm_cfp_forwarded_bh_p(const rb_control_frame_t *cfp, VALUE block_handler)
10305{
10306 return ((VALUE) cfp->block_code) == block_handler;
10307}
10308static inline enum rb_block_type
10309vm_block_type(const struct rb_block *block)
10310{
10311 return block->type;
10312}
10313static inline void
10314vm_block_type_set(const struct rb_block *block, enum rb_block_type type)
10315{
10316 struct rb_block *mb = (struct rb_block *)block;
10317 mb->type = type;
10318}
10319static inline const struct rb_block *
10320vm_proc_block(VALUE procval)
10321{
10322 ((void)0);
10323 return &((rb_proc_t *)(((struct RTypedData *)(procval))->data))->block;
10324}
10325static inline const rb_iseq_t *vm_block_iseq(const struct rb_block *block);
10326static inline const VALUE *vm_block_ep(const struct rb_block *block);
10327static inline const rb_iseq_t *
10328vm_proc_iseq(VALUE procval)
10329{
10330 return vm_block_iseq(vm_proc_block(procval));
10331}
10332static inline const VALUE *
10333vm_proc_ep(VALUE procval)
10334{
10335 return vm_block_ep(vm_proc_block(procval));
10336}
10337static inline const rb_iseq_t *
10338vm_block_iseq(const struct rb_block *block)
10339{
10340 switch (vm_block_type(block)) {
10341 case block_type_iseq: return rb_iseq_check(block->as.captured.code.iseq);
10342 case block_type_proc: return vm_proc_iseq(block->as.proc);
10343 case block_type_ifunc:
10344 case block_type_symbol: return ((void *)0);
10345 }
10346 __builtin_unreachable();
10347 return ((void *)0);
10348}
10349static inline const VALUE *
10350vm_block_ep(const struct rb_block *block)
10351{
10352 switch (vm_block_type(block)) {
10353 case block_type_iseq:
10354 case block_type_ifunc: return block->as.captured.ep;
10355 case block_type_proc: return vm_proc_ep(block->as.proc);
10356 case block_type_symbol: return ((void *)0);
10357 }
10358 __builtin_unreachable();
10359 return ((void *)0);
10360}
10361static inline VALUE
10362vm_block_self(const struct rb_block *block)
10363{
10364 switch (vm_block_type(block)) {
10365 case block_type_iseq:
10366 case block_type_ifunc:
10367 return block->as.captured.self;
10368 case block_type_proc:
10369 return vm_block_self(vm_proc_block(block->as.proc));
10370 case block_type_symbol:
10371 return ((VALUE)RUBY_Qundef);
10372 }
10373 __builtin_unreachable();
10374 return ((VALUE)RUBY_Qundef);
10375}
10376static inline VALUE
10377VM_BH_TO_SYMBOL(VALUE block_handler)
10378{
10379 ((void)0);
10380 return block_handler;
10381}
10382static inline VALUE
10383VM_BH_FROM_SYMBOL(VALUE symbol)
10384{
10385 ((void)0);
10386 return symbol;
10387}
10388static inline VALUE
10389VM_BH_TO_PROC(VALUE block_handler)
10390{
10391 ((void)0);
10392 return block_handler;
10393}
10394static inline VALUE
10395VM_BH_FROM_PROC(VALUE procval)
10396{
10397 ((void)0);
10398 return procval;
10399}
10400VALUE rb_thread_alloc(VALUE klass);
10401VALUE rb_binding_alloc(VALUE klass);
10402VALUE rb_proc_alloc(VALUE klass);
10403VALUE rb_proc_dup(VALUE self);
10404extern void rb_vmdebug_stack_dump_raw(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
10405extern void rb_vmdebug_debug_print_pre(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE *_pc);
10406extern void rb_vmdebug_debug_print_post(const rb_execution_context_t *ec, const rb_control_frame_t *cfp
10407);
10408void rb_vm_bugreport(const void *);
10409typedef void (*ruby_sighandler_t)(int);
10410__attribute__((__format__(__printf__, 4, 5)))
10411__attribute__((__noreturn__)) void rb_bug_for_fatal_signal(ruby_sighandler_t default_sighandler, int sig, const void *, const char *fmt, ...);
10412
10413
10414VALUE rb_iseq_eval(const rb_iseq_t *iseq);
10415VALUE rb_iseq_eval_main(const rb_iseq_t *iseq);
10416VALUE rb_iseq_path(const rb_iseq_t *iseq);
10417VALUE rb_iseq_realpath(const rb_iseq_t *iseq);
10418
10419
10420VALUE rb_iseq_pathobj_new(VALUE path, VALUE realpath);
10421void rb_iseq_pathobj_set(const rb_iseq_t *iseq, VALUE path, VALUE realpath);
10422int rb_ec_frame_method_id_and_class(const rb_execution_context_t *ec, ID *idp, ID *called_idp, VALUE *klassp);
10423void rb_ec_setup_exception(const rb_execution_context_t *ec, VALUE mesg, VALUE cause);
10424VALUE rb_vm_invoke_proc(rb_execution_context_t *ec, rb_proc_t *proc, int argc, const VALUE *argv, int kw_splat, VALUE block_handler);
10425VALUE rb_vm_make_proc_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass, int8_t is_lambda);
10426static inline VALUE
10427rb_vm_make_proc(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
10428{
10429 return rb_vm_make_proc_lambda(ec, captured, klass, 0);
10430}
10431static inline VALUE
10432rb_vm_make_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
10433{
10434 return rb_vm_make_proc_lambda(ec, captured, klass, 1);
10435}
10436VALUE rb_vm_make_binding(const rb_execution_context_t *ec, const rb_control_frame_t *src_cfp);
10437VALUE rb_vm_env_local_variables(const rb_env_t *env);
10438const rb_env_t *rb_vm_env_prev_env(const rb_env_t *env);
10439const VALUE *rb_binding_add_dynavars(VALUE bindval, rb_binding_t *bind, int dyncount, const ID *dynvars);
10440void rb_vm_inc_const_missing_count(void);
10441VALUE rb_vm_call_kw(rb_execution_context_t *ec, VALUE recv, VALUE id, int argc,
10442 const VALUE *argv, const rb_callable_method_entry_t *me, int kw_splat);
10443static void rb_vm_pop_frame(rb_execution_context_t *ec);
10444void rb_gvl_destroy(rb_global_vm_lock_t *gvl);
10445void rb_thread_start_timer_thread(void);
10446void rb_thread_stop_timer_thread(void);
10447void rb_thread_reset_timer_thread(void);
10448void rb_thread_wakeup_timer_thread(int);
10449static inline void
10450rb_vm_living_threads_init(rb_vm_t *vm)
10451{
10452 list_head_init(&vm->waiting_fds);
10453 list_head_init(&vm->waiting_pids);
10454 list_head_init(&vm->workqueue);
10455 list_head_init(&vm->waiting_grps);
10456 list_head_init(&vm->ractor.set);
10457}
10458typedef int rb_backtrace_iter_func(void *, VALUE, int, VALUE);
10459rb_control_frame_t *rb_vm_get_ruby_level_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
10460rb_control_frame_t *rb_vm_get_binding_creatable_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
10461int rb_vm_get_sourceline(const rb_control_frame_t *);
10462void rb_vm_stack_to_heap(rb_execution_context_t *ec);
10463void ruby_thread_init_stack(rb_thread_t *th);
10464rb_thread_t * ruby_thread_from_native(void);
10465int ruby_thread_set_native(rb_thread_t *th);
10466int rb_vm_control_frame_id_and_class(const rb_control_frame_t *cfp, ID *idp, ID *called_idp, VALUE *klassp);
10467void rb_vm_rewind_cfp(rb_execution_context_t *ec, rb_control_frame_t *cfp);
10468static VALUE rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler);
10469void rb_vm_register_special_exception_str(enum ruby_special_exceptions sp, VALUE exception_class, VALUE mesg);
10470void rb_gc_mark_machine_stack(const rb_execution_context_t *ec);static inline
10471void rb_vm_rewrite_cref(rb_cref_t *node, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr);
10472static const rb_callable_method_entry_t *rb_vm_frame_method_entry(const rb_control_frame_t *cfp);
10473VALUE rb_catch_protect(VALUE t, rb_block_call_func *func, VALUE data, enum ruby_tag_type *stateptr);
10474rb_execution_context_t *rb_vm_main_ractor_ec(rb_vm_t *vm);
10475
10476
10477extern struct rb_ractor_struct *ruby_single_main_ractor;
10478extern rb_vm_t *ruby_current_vm_ptr;
10479extern rb_event_flag_t ruby_vm_event_flags;
10480extern rb_event_flag_t ruby_vm_event_enabled_global_flags;
10481extern unsigned int ruby_vm_event_local_num;
10482
10483
10484static inline rb_thread_t *
10485rb_ec_thread_ptr(const rb_execution_context_t *ec)
10486{
10487 return ec->thread_ptr;
10488}
10489static inline rb_ractor_t *
10490rb_ec_ractor_ptr(const rb_execution_context_t *ec)
10491{
10492 const rb_thread_t *th = rb_ec_thread_ptr(ec);
10493 if (th) {
10494 ((void)0);
10495 return th->ractor;
10496 }
10497 else {
10498 return ((void *)0);
10499 }
10500}
10501static inline rb_vm_t *
10502rb_ec_vm_ptr(const rb_execution_context_t *ec)
10503{
10504 const rb_thread_t *th = rb_ec_thread_ptr(ec);
10505 if (th) {
10506 return th->vm;
10507 }
10508 else {
10509 return ((void *)0);
10510 }
10511}
10512static inline rb_execution_context_t *
10513rb_current_execution_context(_Bool expect_ec)
10514{
10515 rb_execution_context_t *ec = ruby_current_ec;
10516 ((void)0);
10517 return ec;
10518}
10519static inline rb_thread_t *
10520rb_current_thread(void)
10521{
10522 const rb_execution_context_t *ec = rb_current_execution_context(1);
10523 return rb_ec_thread_ptr(ec);
10524}
10525static inline rb_ractor_t *
10526rb_current_ractor(void)
10527{
10528 if (ruby_single_main_ractor) {
10529 return ruby_single_main_ractor;
10530 }
10531 else {
10532 const rb_execution_context_t *ec = rb_current_execution_context(1);
10533 return rb_ec_ractor_ptr(ec);
10534 }
10535}
10536static inline rb_vm_t *
10537rb_current_vm(void)
10538{
10539 return ruby_current_vm_ptr;
10540}
10541void rb_ec_vm_lock_rec_release(const rb_execution_context_t *ec,
10542 unsigned int recorded_lock_rec,
10543 unsigned int current_lock_rec);
10544static inline unsigned int
10545rb_ec_vm_lock_rec(const rb_execution_context_t *ec)
10546{
10547 rb_vm_t *vm = rb_ec_vm_ptr(ec);
10548 if (vm->ractor.sync.lock_owner != rb_ec_ractor_ptr(ec)) {
10549 return 0;
10550 }
10551 else {
10552 return vm->ractor.sync.lock_rec;
10553 }
10554}
10555enum {
10556 TIMER_INTERRUPT_MASK = 0x01,
10557 PENDING_INTERRUPT_MASK = 0x02,
10558 POSTPONED_JOB_INTERRUPT_MASK = 0x04,
10559 TRAP_INTERRUPT_MASK = 0x08,
10560 TERMINATE_INTERRUPT_MASK = 0x10,
10561 VM_BARRIER_INTERRUPT_MASK = 0x20,
10562};
10563static inline _Bool
10564RUBY_VM_INTERRUPTED_ANY(rb_execution_context_t *ec)
10565{
10566 return ec->interrupt_flag & ~(ec)->interrupt_mask;
10567}
10568VALUE rb_exc_set_backtrace(VALUE exc, VALUE bt);
10569int rb_signal_buff_size(void);
10570int rb_signal_exec(rb_thread_t *th, int sig);
10571void rb_threadptr_check_signal(rb_thread_t *mth);
10572void rb_threadptr_signal_raise(rb_thread_t *th, int sig);
10573void rb_threadptr_signal_exit(rb_thread_t *th);
10574int rb_threadptr_execute_interrupts(rb_thread_t *, int);
10575void rb_threadptr_interrupt(rb_thread_t *th);
10576void rb_threadptr_unlock_all_locking_mutexes(rb_thread_t *th);
10577void rb_threadptr_pending_interrupt_clear(rb_thread_t *th);
10578void rb_threadptr_pending_interrupt_enque(rb_thread_t *th, VALUE v);
10579VALUE rb_ec_get_errinfo(const rb_execution_context_t *ec);
10580void rb_ec_error_print(rb_execution_context_t * volatile ec, volatile VALUE errinfo);
10581void rb_execution_context_update(const rb_execution_context_t *ec);
10582void rb_execution_context_mark(const rb_execution_context_t *ec);
10583void rb_fiber_close(rb_fiber_t *fib);
10584void Init_native_thread(rb_thread_t *th);
10585int rb_vm_check_ints_blocking(rb_execution_context_t *ec);
10586void rb_vm_cond_wait(rb_vm_t *vm, rb_nativethread_cond_t *cond);
10587void rb_vm_cond_timedwait(rb_vm_t *vm, rb_nativethread_cond_t *cond, unsigned long msec);
10588static inline void
10589rb_vm_check_ints(rb_execution_context_t *ec)
10590{
10591 ((void)0);
10592 if ((__builtin_expect(!!(RUBY_VM_INTERRUPTED_ANY(ec)), 0))) {
10593 rb_threadptr_execute_interrupts(rb_ec_thread_ptr(ec), 0);
10594 }
10595}
10596struct rb_trace_arg_struct {
10597 rb_event_flag_t event;
10598 rb_execution_context_t *ec;
10599 const rb_control_frame_t *cfp;
10600 VALUE self;
10601 ID id;
10602 ID called_id;
10603 VALUE klass;
10604 VALUE data;
10605 int klass_solved;
10606 int lineno;
10607 VALUE path;
10608};
10609void rb_hook_list_mark(rb_hook_list_t *hooks);
10610void rb_hook_list_free(rb_hook_list_t *hooks);
10611void rb_hook_list_connect_tracepoint(VALUE target, rb_hook_list_t *list, VALUE tpval, unsigned int target_line);
10612void rb_hook_list_remove_tracepoint(rb_hook_list_t *list, VALUE tpval);
10613void rb_exec_event_hooks(struct rb_trace_arg_struct *trace_arg, rb_hook_list_t *hooks, int pop_p);
10614static inline void
10615rb_exec_event_hook_orig(rb_execution_context_t *ec, rb_hook_list_t *hooks, rb_event_flag_t flag,
10616 VALUE self, ID id, ID called_id, VALUE klass, VALUE data, int pop_p)
10617{
10618 struct rb_trace_arg_struct trace_arg;
10619 ((void)0);
10620 trace_arg.event = flag;
10621 trace_arg.ec = ec;
10622 trace_arg.cfp = ec->cfp;
10623 trace_arg.self = self;
10624 trace_arg.id = id;
10625 trace_arg.called_id = called_id;
10626 trace_arg.klass = klass;
10627 trace_arg.data = data;
10628 trace_arg.path = ((VALUE)RUBY_Qundef);
10629 trace_arg.klass_solved = 0;
10630 rb_exec_event_hooks(&trace_arg, hooks, pop_p);
10631}
10632struct rb_ractor_pub {
10633 VALUE self;
10634 uint32_t id;
10635 rb_hook_list_t hooks;
10636};
10637static inline rb_hook_list_t *
10638rb_ec_ractor_hooks(const rb_execution_context_t *ec)
10639{
10640 struct rb_ractor_pub *cr_pub = (struct rb_ractor_pub *)rb_ec_ractor_ptr(ec);
10641 return &cr_pub->hooks;
10642}
10643static inline void
10644rb_exec_event_hook_script_compiled(rb_execution_context_t *ec, const rb_iseq_t *iseq, VALUE eval_script)
10645{
10646 do { const rb_event_flag_t flag_arg_ = (0x2000); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, ec->cfp->self, 0, 0, 0, RB_NIL_P(eval_script) ? (VALUE)iseq : __extension__ ({ const VALUE args_to_new_ary[] = {eval_script, (VALUE)iseq}; if (__builtin_constant_p(2)) { __extension__ _Static_assert(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))) == (2), "rb_ary_new_from_args" ": " "numberof(args_to_new_ary) == (2)"); } rb_ary_new_from_values(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))), args_to_new_ary); }), 0); } } while (0);
10647}
10648void rb_vm_trap_exit(rb_vm_t *vm);
10649
10650
10651int rb_thread_check_trap_pending(void);
10652extern VALUE rb_get_coverages(void);
10653extern void rb_set_coverages(VALUE, int, VALUE);
10654extern void rb_clear_coverages(void);
10655extern void rb_reset_coverages(void);
10656extern void rb_resume_coverages(void);
10657extern void rb_suspend_coverages(void);
10658void rb_postponed_job_flush(rb_vm_t *vm);
10659extern VALUE rb_eRactorUnsafeError;
10660extern VALUE rb_eRactorIsolationError;
10661
10662
10663static inline void
10664vm_passed_block_handler_set(rb_execution_context_t *ec, VALUE block_handler)
10665{
10666 vm_block_handler_verify(block_handler);
10667 ec->passed_block_handler = block_handler;
10668}
10669static inline void
10670pass_passed_block_handler(rb_execution_context_t *ec)
10671{
10672 VALUE block_handler = rb_vm_frame_block_handler(ec->cfp);
10673 vm_passed_block_handler_set(ec, block_handler);
10674 VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_PASSED);
10675}
10676
10677extern int *__errno_location (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
10678extern char *program_invocation_name;
10679extern char *program_invocation_short_name;
10680typedef int error_t;
10681
10682static inline void
10683rb_ec_vm_lock_rec_check(const rb_execution_context_t *ec, unsigned int recorded_lock_rec)
10684{
10685 unsigned int current_lock_rec = rb_ec_vm_lock_rec(ec);
10686 if (current_lock_rec != recorded_lock_rec) {
10687 rb_ec_vm_lock_rec_release(ec, recorded_lock_rec, current_lock_rec);
10688 }
10689}
10690static inline int
10691rb_ec_tag_state(const rb_execution_context_t *ec)
10692{
10693 struct rb_vm_tag *tag = ec->tag;
10694 enum ruby_tag_type state = tag->state;
10695 tag->state = RUBY_TAG_NONE;
10696 rb_ec_vm_lock_rec_check(ec, tag->lock_rec);
10697 return state;
10698}
10699__attribute__((__noreturn__)) static inline void rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st);
10700static inline void
10701rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st)
10702{
10703 ec->tag->state = st;
10704 __builtin_longjmp(((ec->tag->buf)),(1));
10705}
10706static inline int CREF_SINGLETON(const rb_cref_t *cref);
10707static inline VALUE
10708CREF_CLASS(const rb_cref_t *cref)
10709{
10710 if (CREF_SINGLETON(cref)) {
10711 return rb_class_of(cref->klass_or_self);
10712 }
10713 else {
10714 return cref->klass_or_self;
10715 }
10716}
10717static inline VALUE
10718CREF_CLASS_FOR_DEFINITION(const rb_cref_t *cref)
10719{
10720 if (CREF_SINGLETON(cref)) {
10721 return rb_singleton_class(cref->klass_or_self);
10722 }
10723 else {
10724 return cref->klass_or_self;
10725 }
10726}
10727static inline rb_cref_t *
10728CREF_NEXT(const rb_cref_t *cref)
10729{
10730 return cref->next;
10731}
10732static inline const rb_scope_visibility_t *
10733CREF_SCOPE_VISI(const rb_cref_t *cref)
10734{
10735 return &cref->scope_visi;
10736}
10737static inline VALUE
10738CREF_REFINEMENTS(const rb_cref_t *cref)
10739{
10740 return cref->refinements;
10741}
10742static inline void
10743CREF_REFINEMENTS_SET(rb_cref_t *cref, VALUE refs)
10744{
10745 rb_obj_write((VALUE)(cref), __extension__({
10746 ;
10747 ; __typeof__((VALUE *)(&cref->refinements)) unaligned_member_access_result = ((VALUE *)(&cref->refinements));
10748 ; unaligned_member_access_result; }), (VALUE)(refs), "./eval_intern.h", 223);
10749}
10750static inline int
10751CREF_PUSHED_BY_EVAL(const rb_cref_t *cref)
10752{
10753 return cref->flags & ((VALUE)RUBY_FL_USER5);
10754}
10755static inline void
10756CREF_PUSHED_BY_EVAL_SET(rb_cref_t *cref)
10757{
10758 cref->flags |= ((VALUE)RUBY_FL_USER5);
10759}
10760static inline int
10761CREF_SINGLETON(const rb_cref_t *cref)
10762{
10763 return cref->flags & ((VALUE)RUBY_FL_USER7);
10764}
10765static inline void
10766CREF_SINGLETON_SET(rb_cref_t *cref)
10767{
10768 cref->flags |= ((VALUE)RUBY_FL_USER7);
10769}
10770static inline int
10771CREF_OMOD_SHARED(const rb_cref_t *cref)
10772{
10773 return cref->flags & ((VALUE)RUBY_FL_USER6);
10774}
10775static inline void
10776CREF_OMOD_SHARED_SET(rb_cref_t *cref)
10777{
10778 cref->flags |= ((VALUE)RUBY_FL_USER6);
10779}
10780static inline void
10781CREF_OMOD_SHARED_UNSET(rb_cref_t *cref)
10782{
10783 cref->flags &= ~((VALUE)RUBY_FL_USER6);
10784}
10785enum {
10786 RAISED_EXCEPTION = 1,
10787 RAISED_STACKOVERFLOW = 2,
10788 RAISED_NOMEMORY = 4
10789};
10790int rb_ec_set_raised(rb_execution_context_t *ec);
10791int rb_ec_reset_raised(rb_execution_context_t *ec);
10792int rb_ec_stack_check(rb_execution_context_t *ec);
10793VALUE rb_f_eval(int argc, const VALUE *argv, VALUE self);
10794VALUE rb_make_exception(int argc, const VALUE *argv);
10795__attribute__((__noreturn__)) void rb_method_name_error(VALUE, VALUE);
10796__attribute__((__noreturn__)) void rb_fiber_start(rb_fiber_t*);
10797__attribute__((__noreturn__)) void rb_print_undef(VALUE, ID, rb_method_visibility_t);
10798__attribute__((__noreturn__)) void rb_print_undef_str(VALUE, VALUE);
10799__attribute__((__noreturn__)) void rb_print_inaccessible(VALUE, ID, rb_method_visibility_t);
10800__attribute__((__noreturn__)) void rb_vm_localjump_error(const char *,VALUE, int);
10801__attribute__((__noreturn__)) void rb_vm_jump_tag_but_local_jump(int);
10802VALUE rb_vm_make_jump_tag_but_local_jump(int state, VALUE val);
10803rb_cref_t *rb_vm_cref(void);
10804rb_cref_t *rb_vm_cref_replace_with_duplicated_cref(void);
10805VALUE rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, VALUE block_handler, VALUE filename);
10806void rb_vm_set_progname(VALUE filename);
10807VALUE rb_vm_cbase(void);
10808VALUE rb_ec_backtrace_object(const rb_execution_context_t *ec);
10809VALUE rb_ec_backtrace_str_ary(const rb_execution_context_t *ec, long lev, long n);
10810VALUE rb_ec_backtrace_location_ary(const rb_execution_context_t *ec, long lev, long n, _Bool skip_internal);
10811static inline char *
10812rb_char_next(const char *p)
10813{
10814 if (p) {
10815 int len = mblen(p, 0x7fffffff);
10816 p += len > 0 ? len : 1;
10817 }
10818 return (char *)p;
10819}
10820const char *rb_obj_info(VALUE obj);
10821const char *rb_raw_obj_info(char *buff, const int buff_size, VALUE obj);
10822VALUE rb_gc_disable_no_rest(void);
10823struct rb_thread_struct;
10824
10825
10826size_t rb_objspace_data_type_memsize(VALUE obj);
10827void rb_objspace_reachable_objects_from(VALUE obj, void (func)(VALUE, void *), void *data);
10828void rb_objspace_reachable_objects_from_root(void (func)(const char *category, VALUE, void *), void *data);
10829int rb_objspace_markable_object_p(VALUE obj);
10830int rb_objspace_internal_object_p(VALUE obj);
10831int rb_objspace_marked_object_p(VALUE obj);
10832void rb_objspace_each_objects(
10833 int (*callback)(void *start, void *end, size_t stride, void *data),
10834 void *data);
10835void rb_objspace_each_objects_without_setup(
10836 int (*callback)(void *, void *, size_t, void *),
10837 void *data);
10838
10839
10840struct rb_iseq_struct;
10841int rb_dvar_defined(ID, const struct rb_iseq_struct *);
10842int rb_local_defined(ID, const struct rb_iseq_struct *);
10843const char *rb_insns_name(int i);
10844VALUE rb_insns_name_array(void);
10845int rb_iseq_cdhash_cmp(VALUE val, VALUE lit);
10846st_index_t rb_iseq_cdhash_hash(VALUE a);
10847int rb_vm_insn_addr2insn(const void *);
10848int rb_vm_insn_decode(const VALUE encoded);
10849extern _Bool ruby_vm_keep_script_lines;
10850
10851
10852rb_event_flag_t rb_iseq_event_flags(const struct rb_iseq_struct *iseq, size_t pos);
10853
10854
10855struct rb_thread_struct;
10856struct rb_fiber_struct;
10857void rb_fiber_reset_root_local_storage(struct rb_thread_struct *);
10858void ruby_register_rollback_func_for_ensure(VALUE (*ensure_func)(VALUE), VALUE (*rollback_func)(VALUE));
10859void rb_fiber_init_mjit_cont(struct rb_fiber_struct *fiber);
10860VALUE rb_fiberptr_self(struct rb_fiber_struct *fiber);
10861unsigned int rb_fiberptr_blocking(struct rb_fiber_struct *fiber);
10862
10863
10864enum ruby_coderange_type {
10865 RUBY_ENC_CODERANGE_UNKNOWN = 0,
10866 RUBY_ENC_CODERANGE_7BIT = ((int)RUBY_FL_USER8),
10867 RUBY_ENC_CODERANGE_VALID = ((int)RUBY_FL_USER9),
10868 RUBY_ENC_CODERANGE_BROKEN = ((int)(RUBY_FL_USER8|RUBY_FL_USER9)),
10869 RUBY_ENC_CODERANGE_MASK = (RUBY_ENC_CODERANGE_7BIT|
10870 RUBY_ENC_CODERANGE_VALID|
10871 RUBY_ENC_CODERANGE_BROKEN)
10872};
10873__attribute__((__const__))
10874static inline int
10875rb_enc_coderange_clean_p(int cr)
10876{
10877 return (cr ^ (cr >> 1)) & RUBY_ENC_CODERANGE_7BIT;
10878}
10879__attribute__((__const__))
10880static inline _Bool
10881RB_ENC_CODERANGE_CLEAN_P(enum ruby_coderange_type cr)
10882{
10883 return rb_enc_coderange_clean_p(cr);
10884}
10885__attribute__((__pure__))
10886static inline enum ruby_coderange_type
10887RB_ENC_CODERANGE(VALUE obj)
10888{
10889 VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENC_CODERANGE_MASK);
10890 return ((enum ruby_coderange_type)ret);
10891}
10892__attribute__((__pure__))
10893static inline _Bool
10894RB_ENC_CODERANGE_ASCIIONLY(VALUE obj)
10895{
10896 return RB_ENC_CODERANGE(obj) == RUBY_ENC_CODERANGE_7BIT;
10897}
10898static inline void
10899RB_ENC_CODERANGE_SET(VALUE obj, enum ruby_coderange_type cr)
10900{
10901 RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
10902 RB_FL_SET_RAW(obj, cr);
10903}
10904static inline void
10905RB_ENC_CODERANGE_CLEAR(VALUE obj)
10906{
10907 RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
10908}
10909__attribute__((__const__))
10910static inline enum ruby_coderange_type
10911RB_ENC_CODERANGE_AND(enum ruby_coderange_type a, enum ruby_coderange_type b)
10912{
10913 if (a == RUBY_ENC_CODERANGE_7BIT) {
10914 return b;
10915 }
10916 else if (a != RUBY_ENC_CODERANGE_VALID) {
10917 return RUBY_ENC_CODERANGE_UNKNOWN;
10918 }
10919 else if (b == RUBY_ENC_CODERANGE_7BIT) {
10920 return RUBY_ENC_CODERANGE_VALID;
10921 }
10922 else {
10923 return b;
10924 }
10925}
10926
10927
10928
10929
10930typedef unsigned char OnigUChar;
10931typedef unsigned int OnigCodePoint;
10932typedef unsigned int OnigCtype;
10933typedef size_t OnigDistance;
10934typedef ptrdiff_t OnigPosition;
10935typedef unsigned int OnigCaseFoldType;
10936extern OnigCaseFoldType OnigDefaultCaseFoldFlag;
10937typedef struct {
10938 int byte_len;
10939 int code_len;
10940 OnigCodePoint code[3];
10941} OnigCaseFoldCodeItem;
10942typedef struct {
10943 OnigCodePoint esc;
10944 OnigCodePoint anychar;
10945 OnigCodePoint anytime;
10946 OnigCodePoint zero_or_one_time;
10947 OnigCodePoint one_or_more_time;
10948 OnigCodePoint anychar_anytime;
10949} OnigMetaCharTableType;
10950typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg);
10951typedef struct OnigEncodingTypeST {
10952 int (*precise_mbc_enc_len)(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
10953 const char* name;
10954 int max_enc_len;
10955 int min_enc_len;
10956 int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
10957 OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
10958 int (*code_to_mbclen)(OnigCodePoint code, const struct OnigEncodingTypeST* enc);
10959 int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf, const struct OnigEncodingTypeST* enc);
10960 int (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, const struct OnigEncodingTypeST* enc);
10961 int (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, const struct OnigEncodingTypeST* enc);
10962 int (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[], const struct OnigEncodingTypeST* enc);
10963 int (*property_name_to_ctype)(const struct OnigEncodingTypeST* enc, const OnigUChar* p, const OnigUChar* end);
10964 int (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype, const struct OnigEncodingTypeST* enc);
10965 int (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], const struct OnigEncodingTypeST* enc);
10966 OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
10967 int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
10968 int (*case_map)(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
10969 int ruby_encoding_index;
10970 unsigned int flags;
10971} OnigEncodingType;
10972typedef const OnigEncodingType* OnigEncoding;
10973extern const OnigEncodingType OnigEncodingASCII;
10974extern
10975int onigenc_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
10976extern
10977int onigenc_mbclen_approximate(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
10978extern
10979OnigUChar* onigenc_step_back(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, int n);
10980extern
10981int onigenc_init(void);
10982extern
10983int onigenc_set_default_encoding(OnigEncoding enc);
10984extern
10985OnigEncoding onigenc_get_default_encoding(void);
10986extern
10987OnigUChar* onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, const OnigUChar** prev);
10988extern
10989OnigUChar* onigenc_get_prev_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
10990extern
10991OnigUChar* onigenc_get_left_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
10992extern
10993OnigUChar* onigenc_get_right_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
10994extern
10995int onigenc_strlen(OnigEncoding enc, const OnigUChar* p, const OnigUChar* end);
10996extern
10997int onigenc_strlen_null(OnigEncoding enc, const OnigUChar* p);
10998extern
10999int onigenc_str_bytelen_null(OnigEncoding enc, const OnigUChar* p);
11000typedef unsigned int OnigOptionType;
11001typedef struct {
11002 unsigned int op;
11003 unsigned int op2;
11004 unsigned int behavior;
11005 OnigOptionType options;
11006 OnigMetaCharTableType meta_char_table;
11007} OnigSyntaxType;
11008extern const OnigSyntaxType OnigSyntaxASIS;
11009extern const OnigSyntaxType OnigSyntaxPosixBasic;
11010extern const OnigSyntaxType OnigSyntaxPosixExtended;
11011extern const OnigSyntaxType OnigSyntaxEmacs;
11012extern const OnigSyntaxType OnigSyntaxGrep;
11013extern const OnigSyntaxType OnigSyntaxGnuRegex;
11014extern const OnigSyntaxType OnigSyntaxJava;
11015extern const OnigSyntaxType OnigSyntaxPerl58;
11016extern const OnigSyntaxType OnigSyntaxPerl58_NG;
11017extern const OnigSyntaxType OnigSyntaxPerl;
11018extern const OnigSyntaxType OnigSyntaxRuby;
11019extern const OnigSyntaxType OnigSyntaxPython;
11020extern const OnigSyntaxType* OnigDefaultSyntax;
11021struct re_registers {
11022 int allocated;
11023 int num_regs;
11024 OnigPosition* beg;
11025 OnigPosition* end;
11026};
11027typedef struct re_registers OnigRegion;
11028typedef struct {
11029 OnigEncoding enc;
11030 OnigUChar* par;
11031 OnigUChar* par_end;
11032} OnigErrorInfo;
11033typedef struct {
11034 int lower;
11035 int upper;
11036} OnigRepeatRange;
11037typedef void (*OnigWarnFunc)(const char* s);
11038extern void onig_null_warn(const char* s);
11039typedef struct re_pattern_buffer {
11040 unsigned char* p;
11041 unsigned int used;
11042 unsigned int alloc;
11043 int num_mem;
11044 int num_repeat;
11045 int num_null_check;
11046 int num_comb_exp_check;
11047 int num_call;
11048 unsigned int capture_history;
11049 unsigned int bt_mem_start;
11050 unsigned int bt_mem_end;
11051 int stack_pop_level;
11052 int repeat_range_alloc;
11053 OnigOptionType options;
11054 OnigRepeatRange* repeat_range;
11055 OnigEncoding enc;
11056 const OnigSyntaxType* syntax;
11057 void* name_table;
11058 OnigCaseFoldType case_fold_flag;
11059 int optimize;
11060 int threshold_len;
11061 int anchor;
11062 OnigDistance anchor_dmin;
11063 OnigDistance anchor_dmax;
11064 int sub_anchor;
11065 unsigned char *exact;
11066 unsigned char *exact_end;
11067 unsigned char map[256];
11068 int *int_map;
11069 int *int_map_backward;
11070 OnigDistance dmin;
11071 OnigDistance dmax;
11072 struct re_pattern_buffer* chain;
11073} OnigRegexType;
11074typedef OnigRegexType* OnigRegex;
11075typedef OnigRegexType regex_t;
11076typedef struct {
11077 int num_of_elements;
11078 OnigEncoding pattern_enc;
11079 OnigEncoding target_enc;
11080 const OnigSyntaxType* syntax;
11081 OnigOptionType option;
11082 OnigCaseFoldType case_fold_flag;
11083} OnigCompileInfo;
11084extern
11085int onig_initialize(OnigEncoding encodings[], int n);
11086extern
11087int onig_init(void);
11088extern
11089int onig_error_code_to_str(OnigUChar* s, OnigPosition err_code, ...);
11090extern
11091void onig_set_warn_func(OnigWarnFunc f);
11092extern
11093void onig_set_verb_warn_func(OnigWarnFunc f);
11094extern
11095int onig_new(OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
11096extern
11097int onig_reg_init(OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, const OnigSyntaxType* syntax);
11098extern
11099int onig_new_without_alloc(OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
11100extern
11101int onig_new_deluxe(OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo);
11102extern
11103void onig_free(OnigRegex);
11104extern
11105void onig_free_body(OnigRegex);
11106extern
11107OnigPosition onig_scan(OnigRegex reg, const OnigUChar* str, const OnigUChar* end, OnigRegion* region, OnigOptionType option, int (*scan_callback)(OnigPosition, OnigPosition, OnigRegion*, void*), void* callback_arg);
11108extern
11109OnigPosition onig_search(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
11110extern
11111OnigPosition onig_search_gpos(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* global_pos, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
11112extern
11113OnigPosition onig_match(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option);
11114extern
11115OnigRegion* onig_region_new(void);
11116extern
11117void onig_region_init(OnigRegion* region);
11118extern
11119void onig_region_free(OnigRegion* region, int free_self);
11120extern
11121void onig_region_copy(OnigRegion* to, const OnigRegion* from);
11122extern
11123void onig_region_clear(OnigRegion* region);
11124extern
11125int onig_region_resize(OnigRegion* region, int n);
11126extern
11127int onig_region_set(OnigRegion* region, int at, int beg, int end);
11128extern
11129int onig_name_to_group_numbers(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums);
11130extern
11131int onig_name_to_backref_number(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, const OnigRegion *region);
11132extern
11133int onig_foreach_name(OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg);
11134extern
11135int onig_number_of_names(const OnigRegexType *reg);
11136extern
11137int onig_number_of_captures(const OnigRegexType *reg);
11138extern
11139int onig_number_of_capture_histories(const OnigRegexType *reg);
11140extern
11141int onig_capture_tree_traverse(OnigRegion* region, int at, int(*callback_func)(int,OnigPosition,OnigPosition,int,int,void*), void* arg);
11142extern
11143int onig_noname_group_capture_is_active(const OnigRegexType *reg);
11144extern
11145OnigEncoding onig_get_encoding(const OnigRegexType *reg);
11146extern
11147OnigOptionType onig_get_options(const OnigRegexType *reg);
11148extern
11149OnigCaseFoldType onig_get_case_fold_flag(const OnigRegexType *reg);
11150extern
11151const OnigSyntaxType* onig_get_syntax(const OnigRegexType *reg);
11152extern
11153int onig_set_default_syntax(const OnigSyntaxType* syntax);
11154extern
11155void onig_copy_syntax(OnigSyntaxType* to, const OnigSyntaxType* from);
11156extern
11157unsigned int onig_get_syntax_op(const OnigSyntaxType* syntax);
11158extern
11159unsigned int onig_get_syntax_op2(const OnigSyntaxType* syntax);
11160extern
11161unsigned int onig_get_syntax_behavior(const OnigSyntaxType* syntax);
11162extern
11163OnigOptionType onig_get_syntax_options(const OnigSyntaxType* syntax);
11164extern
11165void onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op);
11166extern
11167void onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2);
11168extern
11169void onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior);
11170extern
11171void onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options);
11172extern
11173int onig_set_meta_char(OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code);
11174extern
11175void onig_copy_encoding(OnigEncodingType *to, OnigEncoding from);
11176extern
11177OnigCaseFoldType onig_get_default_case_fold_flag(void);
11178extern
11179int onig_set_default_case_fold_flag(OnigCaseFoldType case_fold_flag);
11180extern
11181unsigned int onig_get_match_stack_limit_size(void);
11182extern
11183int onig_set_match_stack_limit_size(unsigned int size);
11184extern
11185unsigned int onig_get_parse_depth_limit(void);
11186extern
11187int onig_set_parse_depth_limit(unsigned int depth);
11188extern
11189int onig_end(void);
11190extern
11191const char* onig_version(void);
11192extern
11193const char* onig_copyright(void);
11194
11195
11196
11197
11198extern VALUE rb_cEncoding;
11199enum ruby_encoding_consts {
11200 RUBY_ENCODING_INLINE_MAX = 127,
11201 RUBY_ENCODING_SHIFT = (RUBY_FL_USHIFT+10),
11202 RUBY_ENCODING_MASK = (RUBY_ENCODING_INLINE_MAX<<RUBY_ENCODING_SHIFT
11203 ),
11204 RUBY_ENCODING_MAXNAMELEN = 42
11205};
11206static inline void
11207RB_ENCODING_SET_INLINED(VALUE obj, int encindex)
11208{
11209 VALUE f = encindex;
11210 f <<= RUBY_ENCODING_SHIFT;
11211 RB_FL_UNSET_RAW(obj, RUBY_ENCODING_MASK);
11212 RB_FL_SET_RAW(obj, f);
11213}
11214static inline int
11215RB_ENCODING_GET_INLINED(VALUE obj)
11216{
11217 VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENCODING_MASK) >> RUBY_ENCODING_SHIFT;
11218 return ((int)ret);
11219}
11220typedef const OnigEncodingType rb_encoding;
11221
11222int rb_char_to_option_kcode(int c, int *option, int *kcode);
11223int rb_enc_replicate(const char *name, rb_encoding *src);
11224int rb_define_dummy_encoding(const char *name);
11225__attribute__((__pure__))
11226int rb_enc_dummy_p(rb_encoding *enc);
11227__attribute__((__pure__))
11228int rb_enc_to_index(rb_encoding *enc);
11229int rb_enc_get_index(VALUE obj);
11230static inline int
11231RB_ENCODING_GET(VALUE obj)
11232{
11233 int encindex = RB_ENCODING_GET_INLINED(obj);
11234 if (encindex == RUBY_ENCODING_INLINE_MAX) {
11235 return rb_enc_get_index(obj);
11236 }
11237 else {
11238 return encindex;
11239 }
11240}
11241void rb_enc_set_index(VALUE obj, int encindex);
11242static inline void
11243RB_ENCODING_SET(VALUE obj, int encindex)
11244{
11245 rb_enc_set_index(obj, encindex);
11246}
11247static inline void
11248RB_ENCODING_CODERANGE_SET(VALUE obj, int encindex, enum ruby_coderange_type cr)
11249{
11250 RB_ENCODING_SET(obj, encindex);
11251 RB_ENC_CODERANGE_SET(obj, cr);
11252}
11253__attribute__((__pure__))
11254int rb_enc_capable(VALUE obj);
11255int rb_enc_find_index(const char *name);
11256int rb_enc_alias(const char *alias, const char *orig);
11257int rb_to_encoding_index(VALUE obj);
11258rb_encoding *rb_to_encoding(VALUE obj);
11259rb_encoding *rb_find_encoding(VALUE obj);
11260rb_encoding *rb_enc_get(VALUE obj);
11261rb_encoding *rb_enc_compatible(VALUE str1, VALUE str2);
11262rb_encoding *rb_enc_check(VALUE str1,VALUE str2);
11263VALUE rb_enc_associate_index(VALUE obj, int encindex);
11264VALUE rb_enc_associate(VALUE obj, rb_encoding *enc);
11265void rb_enc_copy(VALUE dst, VALUE src);
11266rb_encoding *rb_enc_from_index(int idx);
11267rb_encoding *rb_enc_find(const char *name);
11268static inline const char *
11269rb_enc_name(rb_encoding *enc)
11270{
11271 return enc->name;
11272}
11273static inline int
11274rb_enc_mbminlen(rb_encoding *enc)
11275{
11276 return enc->min_enc_len;
11277}
11278static inline int
11279rb_enc_mbmaxlen(rb_encoding *enc)
11280{
11281 return enc->max_enc_len;
11282}
11283int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc);
11284int rb_enc_fast_mbclen(const char *p, const char *e, rb_encoding *enc);
11285int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc);
11286int rb_enc_ascget(const char *p, const char *e, int *len, rb_encoding *enc);
11287unsigned int rb_enc_codepoint_len(const char *p, const char *e, int *len, rb_encoding *enc);
11288static inline unsigned int
11289rb_enc_codepoint(const char *p, const char *e, rb_encoding *enc)
11290{
11291 return rb_enc_codepoint_len(p, e, 0, enc);
11292}
11293static inline OnigCodePoint
11294rb_enc_mbc_to_codepoint(const char *p, const char *e, rb_encoding *enc)
11295{
11296 const OnigUChar *up = ((const OnigUChar *)p);
11297 const OnigUChar *ue = ((const OnigUChar *)e);
11298 return (enc)->mbc_to_code((up),(ue),enc);
11299}
11300int rb_enc_codelen(int code, rb_encoding *enc);
11301static inline int
11302rb_enc_code_to_mbclen(int c, rb_encoding *enc)
11303{
11304 OnigCodePoint uc = ((OnigCodePoint)c);
11305 return (enc)->code_to_mbclen(uc,enc);
11306}
11307static inline int
11308rb_enc_mbcput(unsigned int c, void *buf, rb_encoding *enc)
11309{
11310 OnigCodePoint uc = ((OnigCodePoint)c);
11311 OnigUChar *ubuf = ((OnigUChar *)buf);
11312 return (enc)->code_to_mbc(uc,ubuf,enc);
11313}
11314static inline char *
11315rb_enc_prev_char(const char *s, const char *p, const char *e, rb_encoding *enc)
11316{
11317 const OnigUChar *us = ((const OnigUChar *)s);
11318 const OnigUChar *up = ((const OnigUChar *)p);
11319 const OnigUChar *ue = ((const OnigUChar *)e);
11320 OnigUChar *ur = onigenc_get_prev_char_head(enc, us, up, ue);
11321 return ((char *)ur);
11322}
11323static inline char *
11324rb_enc_left_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
11325{
11326 const OnigUChar *us = ((const OnigUChar *)s);
11327 const OnigUChar *up = ((const OnigUChar *)p);
11328 const OnigUChar *ue = ((const OnigUChar *)e);
11329 OnigUChar *ur = onigenc_get_left_adjust_char_head(enc, us, up, ue);
11330 return ((char *)ur);
11331}
11332static inline char *
11333rb_enc_right_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
11334{
11335 const OnigUChar *us = ((const OnigUChar *)s);
11336 const OnigUChar *up = ((const OnigUChar *)p);
11337 const OnigUChar *ue = ((const OnigUChar *)e);
11338 OnigUChar *ur = onigenc_get_right_adjust_char_head(enc, us, up, ue);
11339 return ((char *)ur);
11340}
11341static inline char *
11342rb_enc_step_back(const char *s, const char *p, const char *e, int n, rb_encoding *enc)
11343{
11344 const OnigUChar *us = ((const OnigUChar *)s);
11345 const OnigUChar *up = ((const OnigUChar *)p);
11346 const OnigUChar *ue = ((const OnigUChar *)e);
11347 const OnigUChar *ur = onigenc_step_back(enc, us, up, ue, n);
11348 return ((char *)ur);
11349}
11350static inline int
11351rb_enc_asciicompat_inline(rb_encoding *enc)
11352{
11353 return rb_enc_mbminlen(enc)==1 && !rb_enc_dummy_p(enc);
11354}
11355static inline _Bool
11356rb_enc_asciicompat(rb_encoding *enc)
11357{
11358 if (rb_enc_mbminlen(enc) != 1) {
11359 return 0;
11360 }
11361 else if (rb_enc_dummy_p(enc)) {
11362 return 0;
11363 }
11364 else {
11365 return 1;
11366 }
11367}
11368static inline _Bool
11369rb_enc_str_asciicompat_p(VALUE str)
11370{
11371 rb_encoding *enc = rb_enc_get(str);
11372 return rb_enc_asciicompat(enc);
11373}
11374VALUE rb_enc_from_encoding(rb_encoding *enc);
11375__attribute__((__pure__))
11376int rb_enc_unicode_p(rb_encoding *enc);
11377__attribute__((__returns_nonnull__))
11378rb_encoding *rb_ascii8bit_encoding(void);
11379__attribute__((__returns_nonnull__))
11380rb_encoding *rb_utf8_encoding(void);
11381__attribute__((__returns_nonnull__))
11382rb_encoding *rb_usascii_encoding(void);
11383rb_encoding *rb_locale_encoding(void);
11384rb_encoding *rb_filesystem_encoding(void);
11385rb_encoding *rb_default_external_encoding(void);
11386rb_encoding *rb_default_internal_encoding(void);
11387__attribute__((__const__))
11388int rb_ascii8bit_encindex(void);
11389static inline _Bool
11390RB_ENCODING_IS_ASCII8BIT(VALUE obj)
11391{
11392 return RB_ENCODING_GET_INLINED(obj) == rb_ascii8bit_encindex();
11393}
11394__attribute__((__const__))
11395int rb_utf8_encindex(void);
11396__attribute__((__const__))
11397int rb_usascii_encindex(void);
11398int rb_locale_encindex(void);
11399int rb_filesystem_encindex(void);
11400VALUE rb_enc_default_external(void);
11401VALUE rb_enc_default_internal(void);
11402void rb_enc_set_default_external(VALUE encoding);
11403void rb_enc_set_default_internal(VALUE encoding);
11404VALUE rb_locale_charmap(VALUE klass);
11405
11406
11407
11408
11409static inline _Bool
11410rb_enc_is_newline(const char *p, const char *e, rb_encoding *enc)
11411{
11412 OnigUChar *up = ((OnigUChar *)p);
11413 OnigUChar *ue = ((OnigUChar *)e);
11414 return (enc)->is_mbc_newline((up),(ue),enc);
11415}
11416static inline _Bool
11417rb_enc_isctype(OnigCodePoint c, OnigCtype t, rb_encoding *enc)
11418{
11419 return (enc)->is_code_ctype(c,t,enc);
11420}
11421static inline _Bool
11422rb_enc_isascii(OnigCodePoint c, rb_encoding *enc)
11423{
11424 return ((c) < 128);
11425}
11426static inline _Bool
11427rb_enc_isalpha(OnigCodePoint c, rb_encoding *enc)
11428{
11429 return (enc)->is_code_ctype(c,1,enc);
11430}
11431static inline _Bool
11432rb_enc_islower(OnigCodePoint c, rb_encoding *enc)
11433{
11434 return (enc)->is_code_ctype(c,6,enc);
11435}
11436static inline _Bool
11437rb_enc_isupper(OnigCodePoint c, rb_encoding *enc)
11438{
11439 return (enc)->is_code_ctype(c,10,enc);
11440}
11441static inline _Bool
11442rb_enc_ispunct(OnigCodePoint c, rb_encoding *enc)
11443{
11444 return (enc)->is_code_ctype(c,8,enc);
11445}
11446static inline _Bool
11447rb_enc_isalnum(OnigCodePoint c, rb_encoding *enc)
11448{
11449 return (enc)->is_code_ctype(c,13,enc);
11450}
11451static inline _Bool
11452rb_enc_isprint(OnigCodePoint c, rb_encoding *enc)
11453{
11454 return (enc)->is_code_ctype(c,7,enc);
11455}
11456static inline _Bool
11457rb_enc_isspace(OnigCodePoint c, rb_encoding *enc)
11458{
11459 return (enc)->is_code_ctype(c,9,enc);
11460}
11461static inline _Bool
11462rb_enc_isdigit(OnigCodePoint c, rb_encoding *enc)
11463{
11464 return (enc)->is_code_ctype(c,4,enc);
11465}
11466__attribute__((__const__))
11467int rb_enc_toupper(int c, rb_encoding *enc);
11468__attribute__((__const__))
11469int rb_enc_tolower(int c, rb_encoding *enc);
11470
11471
11472
11473
11474__attribute__((__nonnull__ ()))
11475char *rb_enc_path_next(const char *path, const char *end, rb_encoding *enc);
11476__attribute__((__nonnull__ ()))
11477char *rb_enc_path_skip_prefix(const char *path, const char *end, rb_encoding *enc);
11478__attribute__((__nonnull__ ()))
11479char *rb_enc_path_last_separator(const char *path, const char *end, rb_encoding *enc);
11480__attribute__((__nonnull__ ()))
11481char *rb_enc_path_end(const char *path, const char *end, rb_encoding *enc);
11482__attribute__((__nonnull__ (1, 4)))
11483const char *ruby_enc_find_basename(const char *name, long *baselen, long *alllen, rb_encoding *enc);
11484__attribute__((__nonnull__ (1, 3)))
11485const char *ruby_enc_find_extname(const char *name, long *len, rb_encoding *enc);
11486
11487
11488
11489
11490VALUE rb_enc_reg_new(const char *ptr, long len, rb_encoding *enc, int opts);
11491
11492
11493
11494
11495__attribute__((__nonnull__ (2)))
11496__attribute__((__format__(__printf__, 2, 3)))
11497VALUE rb_enc_sprintf(rb_encoding *enc, const char *fmt, ...);
11498__attribute__((__nonnull__ (2)))
11499__attribute__((__format__(__printf__, 2, 0)))
11500VALUE rb_enc_vsprintf(rb_encoding *enc, const char *fmt, va_list ap);
11501__attribute__((__noreturn__))
11502__attribute__((__nonnull__ (3)))
11503__attribute__((__format__(__printf__, 3, 4)))
11504void rb_enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...);
11505
11506
11507
11508
11509VALUE rb_enc_str_new(const char *ptr, long len, rb_encoding *enc);
11510__attribute__((__nonnull__ (1)))
11511VALUE rb_enc_str_new_cstr(const char *ptr, rb_encoding *enc);
11512VALUE rb_enc_str_new_static(const char *ptr, long len, rb_encoding *enc);
11513VALUE rb_enc_interned_str(const char *ptr, long len, rb_encoding *enc);
11514__attribute__((__nonnull__ (1)))
11515VALUE rb_enc_interned_str_cstr(const char *ptr, rb_encoding *enc);
11516long rb_enc_strlen(const char *head, const char *tail, rb_encoding *enc);
11517char *rb_enc_nth(const char *head, const char *tail, long nth, rb_encoding *enc);
11518VALUE rb_obj_encoding(VALUE obj);
11519VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc);
11520VALUE rb_enc_uint_chr(unsigned int code, rb_encoding *enc);
11521VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *enc);
11522VALUE rb_str_export_to_enc(VALUE obj, rb_encoding *enc);
11523VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to);
11524VALUE rb_str_conv_enc_opts(VALUE str, rb_encoding *from, rb_encoding *to, int ecflags, VALUE ecopts);
11525int rb_enc_str_coderange(VALUE str);
11526long rb_str_coderange_scan_restartable(const char *str, const char *end, rb_encoding *enc, int *cr);
11527int rb_enc_str_asciionly_p(VALUE str);
11528__attribute__((__nonnull__ ()))
11529long rb_memsearch(const void *x, long m, const void *y, long n, rb_encoding *enc);
11530__attribute__((__nonnull__ ()))
11531static inline VALUE
11532rbimpl_enc_str_new_cstr(const char *str, rb_encoding *enc)
11533{
11534 long len = rbimpl_strlen(str);
11535 return rb_enc_str_new_static(str, len, enc);
11536}
11537
11538
11539
11540
11541ID rb_intern3(const char *name, long len, rb_encoding *enc);
11542__attribute__((__nonnull__ ()))
11543int rb_enc_symname_p(const char *str, rb_encoding *enc);
11544int rb_enc_symname2_p(const char *name, long len, rb_encoding *enc);
11545ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc);
11546VALUE rb_check_symbol_cstr(const char *ptr, long len, rb_encoding *enc);
11547
11548
11549
11550
11551typedef enum {
11552 econv_invalid_byte_sequence,
11553 econv_undefined_conversion,
11554 econv_destination_buffer_full,
11555 econv_source_buffer_empty,
11556 econv_finished,
11557 econv_after_output,
11558 econv_incomplete_input
11559} rb_econv_result_t;
11560typedef struct rb_econv_t rb_econv_t;
11561VALUE rb_str_encode(VALUE str, VALUE to, int ecflags, VALUE ecopts);
11562int rb_econv_has_convpath_p(const char* from_encoding, const char* to_encoding);
11563int rb_econv_prepare_options(VALUE opthash, VALUE *ecopts, int ecflags);
11564int rb_econv_prepare_opts(VALUE opthash, VALUE *ecopts);
11565rb_econv_t *rb_econv_open(const char *source_encoding, const char *destination_encoding, int ecflags);
11566rb_econv_t *rb_econv_open_opts(const char *source_encoding, const char *destination_encoding, int ecflags, VALUE ecopts);
11567rb_econv_result_t rb_econv_convert(rb_econv_t *ec,
11568 const unsigned char **source_buffer_ptr, const unsigned char *source_buffer_end,
11569 unsigned char **destination_buffer_ptr, unsigned char *destination_buffer_end,
11570 int flags);
11571void rb_econv_close(rb_econv_t *ec);
11572int rb_econv_set_replacement(rb_econv_t *ec, const unsigned char *str, size_t len, const char *encname);
11573int rb_econv_decorate_at_first(rb_econv_t *ec, const char *decorator_name);
11574int rb_econv_decorate_at_last(rb_econv_t *ec, const char *decorator_name);
11575VALUE rb_econv_open_exc(const char *senc, const char *denc, int ecflags);
11576int rb_econv_insert_output(rb_econv_t *ec,
11577 const unsigned char *str, size_t len, const char *str_encoding);
11578const char *rb_econv_encoding_to_insert_output(rb_econv_t *ec);
11579void rb_econv_check_error(rb_econv_t *ec);
11580VALUE rb_econv_make_exception(rb_econv_t *ec);
11581int rb_econv_putbackable(rb_econv_t *ec);
11582void rb_econv_putback(rb_econv_t *ec, unsigned char *p, int n);
11583const char *rb_econv_asciicompat_encoding(const char *encname);
11584VALUE rb_econv_str_convert(rb_econv_t *ec, VALUE src, int flags);
11585VALUE rb_econv_substr_convert(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, int flags);
11586VALUE rb_econv_str_append(rb_econv_t *ec, VALUE src, VALUE dst, int flags);
11587VALUE rb_econv_substr_append(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, VALUE dst, int flags);
11588VALUE rb_econv_append(rb_econv_t *ec, const char *bytesrc, long bytesize, VALUE dst, int flags);
11589void rb_econv_binmode(rb_econv_t *ec);
11590enum ruby_econv_flag_type {
11591 RUBY_ECONV_ERROR_HANDLER_MASK = 0x000000ff,
11592 RUBY_ECONV_INVALID_MASK = 0x0000000f,
11593 RUBY_ECONV_INVALID_REPLACE = 0x00000002,
11594 RUBY_ECONV_UNDEF_MASK = 0x000000f0,
11595 RUBY_ECONV_UNDEF_REPLACE = 0x00000020,
11596 RUBY_ECONV_UNDEF_HEX_CHARREF = 0x00000030,
11597 RUBY_ECONV_DECORATOR_MASK = 0x0000ff00,
11598 RUBY_ECONV_NEWLINE_DECORATOR_MASK = 0x00003f00,
11599 RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK = 0x00000f00,
11600 RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK = 0x00003000,
11601 RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR = 0x00000100,
11602 RUBY_ECONV_CRLF_NEWLINE_DECORATOR = 0x00001000,
11603 RUBY_ECONV_CR_NEWLINE_DECORATOR = 0x00002000,
11604 RUBY_ECONV_XML_TEXT_DECORATOR = 0x00004000,
11605 RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR = 0x00008000,
11606 RUBY_ECONV_STATEFUL_DECORATOR_MASK = 0x00f00000,
11607 RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR = 0x00100000,
11608 RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR =
11609 0,
11610 RUBY_ECONV_PARTIAL_INPUT = 0x00010000,
11611 RUBY_ECONV_AFTER_OUTPUT = 0x00020000,
11612 RUBY_ECONV_FLAGS_PLACEHOLDER
11613};
11614
11615
11616VALUE rb_fstring(VALUE);
11617VALUE rb_fstring_cstr(const char *str);
11618VALUE rb_fstring_enc_new(const char *ptr, long len, rb_encoding *enc);
11619int rb_str_buf_cat_escaped_char(VALUE result, unsigned int c, int unicode_p);
11620int rb_str_symname_p(VALUE);
11621VALUE rb_str_quote_unprintable(VALUE);
11622char *rb_str_fill_terminator(VALUE str, const int termlen);
11623void rb_str_change_terminator_length(VALUE str, const int oldtermlen, const int termlen);
11624VALUE rb_str_locktmp_ensure(VALUE str, VALUE (*func)(VALUE), VALUE arg);
11625VALUE rb_str_chomp_string(VALUE str, VALUE chomp);
11626VALUE rb_external_str_with_enc(VALUE str, rb_encoding *eenc);
11627VALUE rb_str_cat_conv_enc_opts(VALUE newstr, long ofs, const char *ptr, long len,
11628 rb_encoding *from, int ecflags, VALUE ecopts);
11629VALUE rb_enc_str_scrub(rb_encoding *enc, VALUE str, VALUE repl);
11630VALUE rb_str_escape(VALUE str);
11631size_t rb_str_memsize(VALUE);
11632char *rb_str_to_cstr(VALUE str);
11633const char *ruby_escaped_char(int c);
11634void rb_str_make_independent(VALUE str);
11635int rb_enc_str_coderange_scan(VALUE str, rb_encoding *enc);
11636static inline _Bool STR_EMBED_P(VALUE str);
11637static inline _Bool STR_SHARED_P(VALUE str);
11638static inline VALUE QUOTE(VALUE v);
11639static inline VALUE QUOTE_ID(ID v);
11640static inline _Bool is_ascii_string(VALUE str);
11641static inline _Bool is_broken_string(VALUE str);
11642static inline VALUE rb_str_eql_internal(const VALUE str1, const VALUE str2);
11643
11644
11645VALUE rb_str_tmp_frozen_acquire(VALUE str);
11646void rb_str_tmp_frozen_release(VALUE str, VALUE tmp);
11647VALUE rb_setup_fake_str(struct RString *fake_str, const char *name, long len, rb_encoding *enc);
11648VALUE rb_str_upto_each(VALUE, VALUE, int, int (*each)(VALUE, VALUE), VALUE);
11649VALUE rb_str_upto_endless_each(VALUE, int (*each)(VALUE, VALUE), VALUE);
11650
11651
11652
11653
11654VALUE rb_fstring_new(const char *ptr, long len);
11655VALUE rb_obj_as_string_result(VALUE str, VALUE obj);
11656VALUE rb_str_opt_plus(VALUE x, VALUE y);
11657VALUE rb_str_concat_literals(size_t num, const VALUE *strary);
11658VALUE rb_str_eql(VALUE str1, VALUE str2);
11659VALUE rb_id_quote_unprintable(ID);
11660VALUE rb_sym_proc_call(ID mid, int argc, const VALUE *argv, int kw_splat, VALUE passed_proc);
11661struct rb_execution_context_struct;
11662VALUE rb_ec_str_resurrect(struct rb_execution_context_struct *ec, VALUE str);
11663
11664
11665static inline VALUE
11666QUOTE(VALUE v)
11667{
11668 return rb_str_quote_unprintable(v);
11669}
11670static inline VALUE
11671QUOTE_ID(ID i)
11672{
11673 return rb_id_quote_unprintable(i);
11674}
11675static inline _Bool
11676STR_EMBED_P(VALUE str)
11677{
11678 return ! RB_FL_TEST_RAW(str, ((VALUE)RUBY_FL_USER1));
11679}
11680static inline _Bool
11681STR_SHARED_P(VALUE str)
11682{
11683 return RB_FL_ALL_RAW(str, ((VALUE)RUBY_FL_USER1) | RUBY_ELTS_SHARED);
11684}
11685static inline _Bool
11686is_ascii_string(VALUE str)
11687{
11688 return rb_enc_str_coderange(str) == RUBY_ENC_CODERANGE_7BIT;
11689}
11690static inline _Bool
11691is_broken_string(VALUE str)
11692{
11693 return rb_enc_str_coderange(str) == RUBY_ENC_CODERANGE_BROKEN;
11694}
11695static inline VALUE
11696rb_str_eql_internal(const VALUE str1, const VALUE str2)
11697{
11698 const long len = RSTRING_LEN(str1);
11699 const char *ptr1, *ptr2;
11700 if (len != RSTRING_LEN(str2)) return ((VALUE)RUBY_Qfalse);
11701 if (!rb_str_comparable(str1, str2)) return ((VALUE)RUBY_Qfalse);
11702 if ((ptr1 = RSTRING_PTR(str1)) == (ptr2 = RSTRING_PTR(str2)))
11703 return ((VALUE)RUBY_Qtrue);
11704 if (memcmp(ptr1, ptr2, len) == 0)
11705 return ((VALUE)RUBY_Qtrue);
11706 return ((VALUE)RUBY_Qfalse);
11707}
11708extern long rb_backtrace_length_limit;
11709extern VALUE rb_eEAGAIN;
11710extern VALUE rb_eEWOULDBLOCK;
11711extern VALUE rb_eEINPROGRESS;
11712__attribute__((__format__(__printf__, 3, 0)))
11713void rb_report_bug_valist(VALUE file, int line, const char *fmt, va_list args);
11714__attribute__((__noreturn__)) void rb_async_bug_errno(const char *,int);
11715const char *rb_builtin_type_name(int t);
11716const char *rb_builtin_class_name(VALUE x);
11717__attribute__((__format__(__printf__, (1), (3)))) void rb_warn_deprecated(const char *fmt, const char *suggest, ...);
11718__attribute__((__format__(__printf__, (2), (4)))) void rb_warn_deprecated_to_remove(const char *removal, const char *fmt, const char *suggest, ...);
11719__attribute__((__format__(__printf__, 6, 0)))
11720VALUE rb_syntax_error_append(VALUE, VALUE, int, int, rb_encoding*, const char*, va_list);
11721__attribute__((__format__(__printf__, (2), (3)))) void rb_enc_warn(rb_encoding *enc, const char *fmt, ...);
11722__attribute__((__format__(__printf__, (2), (3)))) void rb_sys_enc_warning(rb_encoding *enc, const char *fmt, ...);
11723__attribute__((__format__(__printf__, (3), (4)))) void rb_syserr_enc_warning(int err, rb_encoding *enc, const char *fmt, ...);
11724rb_warning_category_t rb_warning_category_from_name(VALUE category);
11725_Bool rb_warning_category_enabled_p(rb_warning_category_t category);
11726VALUE rb_name_err_new(VALUE mesg, VALUE recv, VALUE method);
11727VALUE rb_nomethod_err_new(VALUE mesg, VALUE recv, VALUE method, VALUE args, int priv);
11728VALUE rb_key_err_new(VALUE mesg, VALUE recv, VALUE name);
11729__attribute__((__format__(__printf__, (1), (2)))) VALUE rb_warning_string(const char *fmt, ...);
11730__attribute__((__format__(__printf__, 2, 0)))
11731__attribute__((__noreturn__)) void rb_vraise(VALUE, const char *, va_list);
11732__attribute__((__noreturn__)) static inline void rb_raise_cstr(VALUE etype, const char *mesg);
11733__attribute__((__noreturn__)) static inline void rb_raise_cstr_i(VALUE etype, VALUE mesg);
11734__attribute__((__noreturn__)) static inline void rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name);
11735__attribute__((__noreturn__)) static inline void rb_name_err_raise(const char *mesg, VALUE recv, VALUE name);
11736__attribute__((__noreturn__)) static inline void rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name);
11737static inline void Check_Type(VALUE v, enum ruby_value_type t);
11738static inline _Bool rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type);
11739
11740
11741int rb_bug_reporter_add(void (*func)(FILE *, void *), void *data);
11742__attribute__((__noreturn__)) void rb_sys_fail_path_in(const char *func_name, VALUE path);
11743__attribute__((__noreturn__)) void rb_syserr_fail_path_in(const char *func_name, int err, VALUE path);
11744VALUE rb_syserr_new_path_in(const char *func_name, int n, VALUE path);
11745
11746
11747static inline void
11748rb_raise_cstr_i(VALUE etype, VALUE mesg)
11749{
11750 VALUE exc = rb_exc_new_str(etype, mesg);
11751 rb_exc_raise(exc);
11752}
11753static inline void
11754rb_raise_cstr(VALUE etype, const char *mesg)
11755{
11756 VALUE str = ((__builtin_constant_p(mesg) ? rbimpl_str_new_cstr : rb_str_new_cstr) (mesg));
11757 rb_raise_cstr_i(etype, str);
11758}
11759static inline void
11760rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name)
11761{
11762 VALUE exc = rb_name_err_new(mesg, recv, name);
11763 rb_exc_raise(exc);
11764}
11765static inline void
11766rb_name_err_raise(const char *mesg, VALUE recv, VALUE name)
11767{
11768 VALUE str = (__builtin_constant_p(mesg) ? rb_fstring_new((mesg), (long)strlen(mesg)) : (rb_fstring_cstr)(mesg));
11769 rb_name_err_raise_str(str, recv, name);
11770}
11771static inline void
11772rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name)
11773{
11774 VALUE exc = rb_key_err_new(mesg, recv, name);
11775 rb_exc_raise(exc);
11776}
11777static inline _Bool
11778rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type)
11779{
11780 return RB_TYPE_P(obj, RUBY_T_DATA) && RTYPEDDATA_P(obj) && (RTYPEDDATA_TYPE(obj) == data_type);
11781}
11782extern ID ruby_static_id_signo;
11783extern ID ruby_static_id_status;
11784VALUE rb_refinement_module_get_refined_class(VALUE module);
11785void rb_class_modify_check(VALUE);
11786__attribute__((__noreturn__)) VALUE rb_f_raise(int argc, VALUE *argv);
11787VALUE rb_get_backtrace(VALUE info);
11788void rb_call_end_proc(VALUE data);
11789void rb_mark_end_proc(void);
11790void Init_class_hierarchy(void);
11791void Init_enc(void);
11792void Init_ext(void);
11793void Init_File(void);
11794void Init_heap(void);
11795int Init_enc_set_filesystem_encoding(void);
11796void Init_newline(void);
11797void Init_BareVM(void);
11798void Init_vm_objects(void);
11799void Init_vm_backtrace(void);
11800void Init_vm_eval(void);static inline
11801void Init_vm_stack_canary(void);
11802void Init_eval_method(void);
11803void rb_call_inits(void);
11804struct rb_id_table;
11805enum rb_id_table_iterator_result {
11806 ID_TABLE_CONTINUE = ST_CONTINUE,
11807 ID_TABLE_STOP = ST_STOP,
11808 ID_TABLE_DELETE = ST_DELETE,
11809 ID_TABLE_REPLACE = ST_REPLACE,
11810 ID_TABLE_ITERATOR_RESULT_END
11811};
11812struct rb_id_table *rb_id_table_create(size_t size);
11813void rb_id_table_free(struct rb_id_table *tbl);
11814void rb_id_table_clear(struct rb_id_table *tbl);
11815size_t rb_id_table_size(const struct rb_id_table *tbl);
11816size_t rb_id_table_memsize(const struct rb_id_table *tbl);
11817int rb_id_table_insert(struct rb_id_table *tbl, ID id, VALUE val);
11818int rb_id_table_lookup(struct rb_id_table *tbl, ID id, VALUE *valp);
11819int rb_id_table_delete(struct rb_id_table *tbl, ID id);
11820typedef enum rb_id_table_iterator_result rb_id_table_update_callback_func_t(ID *id, VALUE *val, void *data, int existing);
11821typedef enum rb_id_table_iterator_result rb_id_table_foreach_func_t(ID id, VALUE val, void *data);
11822typedef enum rb_id_table_iterator_result rb_id_table_foreach_values_func_t(VALUE val, void *data);
11823void rb_id_table_foreach(struct rb_id_table *tbl, rb_id_table_foreach_func_t *func, void *data);
11824void rb_id_table_foreach_with_replace(struct rb_id_table *tbl, rb_id_table_foreach_func_t *func, rb_id_table_update_callback_func_t *replace, void *data);
11825void rb_id_table_foreach_values(struct rb_id_table *tbl, rb_id_table_foreach_values_func_t *func, void *data);
11826struct rb_subclass_entry {
11827 VALUE klass;
11828 struct rb_subclass_entry *next;
11829 struct rb_subclass_entry *prev;
11830};
11831struct rb_iv_index_tbl_entry {
11832 uint32_t index;
11833 rb_serial_t class_serial;
11834 VALUE class_value;
11835};
11836struct rb_cvar_class_tbl_entry {
11837 uint32_t index;
11838 rb_serial_t global_cvar_state;
11839 VALUE class_value;
11840};
11841struct rb_classext_struct {
11842 struct st_table *iv_index_tbl;
11843 struct st_table *iv_tbl;
11844 struct rb_id_table *m_tbl;
11845 struct rb_id_table *const_tbl;
11846 struct rb_id_table *callable_m_tbl;
11847 struct rb_id_table *cc_tbl;
11848 struct rb_id_table *cvc_tbl;
11849 size_t superclass_depth;
11850 VALUE *superclasses;
11851 struct rb_subclass_entry *subclasses;
11852 struct rb_subclass_entry *subclass_entry;
11853 struct rb_subclass_entry *module_subclass_entry;
11854 const VALUE origin_;
11855 const VALUE refined_class;
11856 rb_alloc_func_t allocator;
11857 const VALUE includer;
11858};
11859struct RClass {
11860 struct RBasic basic;
11861 VALUE super;
11862 struct rb_classext_struct *ptr;
11863 rb_serial_t class_serial;
11864};
11865typedef struct rb_subclass_entry rb_subclass_entry_t;
11866typedef struct rb_classext_struct rb_classext_t;
11867void rb_class_subclass_add(VALUE super, VALUE klass);
11868void rb_class_remove_from_super_subclasses(VALUE);
11869void rb_class_update_superclasses(VALUE);
11870void rb_class_remove_superclasses(VALUE);
11871void rb_class_remove_subclass_head(VALUE);
11872int rb_singleton_class_internal_p(VALUE sklass);
11873VALUE rb_class_boot(VALUE);
11874VALUE rb_class_s_alloc(VALUE klass);
11875VALUE rb_module_s_alloc(VALUE klass);
11876void rb_module_set_initialized(VALUE module);
11877void rb_module_check_initializable(VALUE module);
11878VALUE rb_make_metaclass(VALUE, VALUE);
11879VALUE rb_include_class_new(VALUE, VALUE);
11880void rb_class_foreach_subclass(VALUE klass, void (*f)(VALUE, VALUE), VALUE);
11881void rb_class_detach_subclasses(VALUE);
11882void rb_class_detach_module_subclasses(VALUE);
11883void rb_class_remove_from_module_subclasses(VALUE);
11884VALUE rb_obj_methods(int argc, const VALUE *argv, VALUE obj);
11885VALUE rb_obj_protected_methods(int argc, const VALUE *argv, VALUE obj);
11886VALUE rb_obj_private_methods(int argc, const VALUE *argv, VALUE obj);
11887VALUE rb_obj_public_methods(int argc, const VALUE *argv, VALUE obj);
11888VALUE rb_special_singleton_class(VALUE);
11889VALUE rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach);
11890VALUE rb_singleton_class_get(VALUE obj);
11891void rb_undef_methods_from(VALUE klass, VALUE super);
11892static inline void RCLASS_SET_ORIGIN(VALUE klass, VALUE origin);
11893static inline void RICLASS_SET_ORIGIN_SHARED_MTBL(VALUE iclass);
11894static inline VALUE RCLASS_SUPER(VALUE klass);
11895static inline VALUE RCLASS_SET_SUPER(VALUE klass, VALUE super);
11896static inline void RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass);
11897
11898
11899VALUE rb_class_inherited(VALUE, VALUE);
11900VALUE rb_keyword_error_new(const char *, VALUE);
11901
11902
11903static inline void
11904RCLASS_SET_ORIGIN(VALUE klass, VALUE origin)
11905{
11906 rb_obj_write((VALUE)(klass), __extension__({
11907 ;
11908 ; __typeof__((VALUE *)(&((((struct RClass *)(klass))->ptr)->origin_))) unaligned_member_access_result = ((VALUE *)(&((((struct RClass *)(klass))->ptr)->origin_)));
11909 ; unaligned_member_access_result; }), (VALUE)(origin), "./internal/class.h", 163);
11910 if (klass != origin) RB_FL_SET(origin, ((VALUE)RUBY_FL_USER5));
11911}
11912static inline void
11913RICLASS_SET_ORIGIN_SHARED_MTBL(VALUE iclass)
11914{
11915 RB_FL_SET(iclass, ((VALUE)RUBY_FL_USER8));
11916}
11917static inline _Bool
11918RICLASS_OWNS_M_TBL_P(VALUE iclass)
11919{
11920 return RB_FL_TEST_RAW(iclass, ((VALUE)RUBY_FL_USER5) | ((VALUE)RUBY_FL_USER8)) == ((VALUE)RUBY_FL_USER5);
11921}
11922static inline void
11923RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass)
11924{
11925 rb_obj_write((VALUE)(iclass), __extension__({
11926 ;
11927 ; __typeof__((VALUE *)(&((((struct RClass *)(iclass))->ptr)->includer))) unaligned_member_access_result = ((VALUE *)(&((((struct RClass *)(iclass))->ptr)->includer)));
11928 ; unaligned_member_access_result; }), (VALUE)(klass), "./internal/class.h", 182);
11929}
11930static inline VALUE
11931RCLASS_SUPER(VALUE klass)
11932{
11933 return ((struct RClass *)(klass))->super;
11934}
11935static inline VALUE
11936RCLASS_SET_SUPER(VALUE klass, VALUE super)
11937{
11938 if (super) {
11939 rb_class_remove_from_super_subclasses(klass);
11940 rb_class_subclass_add(super, klass);
11941 }
11942 rb_obj_write((VALUE)(klass), __extension__({
11943 ;
11944 ; __typeof__((VALUE *)(&((struct RClass *)(klass))->super)) unaligned_member_access_result = ((VALUE *)(&((struct RClass *)(klass))->super));
11945 ; unaligned_member_access_result; }), (VALUE)(super), "./internal/class.h", 198);
11946 rb_class_update_superclasses(klass);
11947 return super;
11948}
11949VALUE rb_class_search_ancestor(VALUE klass, VALUE super);
11950__attribute__((__noreturn__)) void rb_undefined_alloc(VALUE klass);
11951double rb_num_to_dbl(VALUE val);
11952VALUE rb_obj_dig(int argc, VALUE *argv, VALUE self, VALUE notfound);
11953VALUE rb_immutable_obj_clone(int, VALUE *, VALUE);
11954VALUE rb_check_convert_type_with_id(VALUE,int,const char*,ID);
11955int rb_bool_expected(VALUE, const char *);
11956static inline void RBASIC_CLEAR_CLASS(VALUE obj);
11957static inline void RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass);
11958static inline void RBASIC_SET_CLASS(VALUE obj, VALUE klass);
11959static inline struct st_table *ROBJECT_IV_INDEX_TBL_inline(VALUE obj);
11960
11961
11962int rb_opts_exception_p(VALUE opts, int default_value);
11963
11964
11965
11966
11967__attribute__((__const__)) VALUE rb_obj_equal(VALUE obj1, VALUE obj2);
11968__attribute__((__const__)) VALUE rb_obj_not(VALUE obj);
11969VALUE rb_obj_not_equal(VALUE obj1, VALUE obj2);
11970void rb_obj_copy_ivar(VALUE dest, VALUE obj);
11971VALUE rb_false(VALUE obj);
11972VALUE rb_convert_type_with_id(VALUE v, int t, const char* nam, ID mid);
11973VALUE rb_obj_size(VALUE self, VALUE args, VALUE obj);
11974VALUE rb_get_freeze_opt(int argc, VALUE *argv);
11975
11976
11977static inline void
11978RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass)
11979{
11980 const VALUE *ptr = &((struct RBasic *)(obj))->klass;
11981 *(VALUE *)ptr = klass;
11982}
11983static inline void
11984RBASIC_CLEAR_CLASS(VALUE obj)
11985{
11986 RBASIC_SET_CLASS_RAW(obj, 0);
11987}
11988static inline void
11989RBASIC_SET_CLASS(VALUE obj, VALUE klass)
11990{
11991 VALUE oldv = RBASIC_CLASS(obj);
11992 RBASIC_SET_CLASS_RAW(obj, klass);
11993 (rb_obj_written((VALUE)(obj), (VALUE)(oldv), (VALUE)(klass), "./internal/object.h", 65));
11994}
11995__attribute__((__pure__))
11996static inline struct st_table *
11997ROBJECT_IV_INDEX_TBL_inline(VALUE obj)
11998{
11999 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
12000 VALUE klass = rb_obj_class(obj);
12001 return ((((struct RClass *)(klass))->ptr)->iv_index_tbl);
12002 }
12003 else {
12004 const struct RObject *const ptr = ((struct RObject *)(obj));
12005 return ptr->as.heap.iv_index_tbl;
12006 }
12007}
12008struct rb_iseq_struct;
12009VALUE rb_parser_set_yydebug(VALUE, VALUE);
12010void *rb_parser_load_file(VALUE parser, VALUE name);
12011void rb_parser_keep_script_lines(VALUE vparser);
12012
12013
12014VALUE rb_parser_set_context(VALUE, const struct rb_iseq_struct *, int);
12015
12016
12017struct rb_block;
12018struct rb_iseq_struct;
12019VALUE rb_proc_location(VALUE self);
12020st_index_t rb_hash_proc(st_index_t hash, VALUE proc);
12021int rb_block_pair_yield_optimizable(void);
12022int rb_block_arity(void);
12023int rb_block_min_max_arity(int *max);
12024VALUE rb_block_to_s(VALUE self, const struct rb_block *block, const char *additional_info);
12025VALUE rb_callable_receiver(VALUE);
12026
12027
12028VALUE rb_func_proc_new(rb_block_call_func_t func, VALUE val);
12029VALUE rb_func_lambda_new(rb_block_call_func_t func, VALUE val, int min_argc, int max_argc);
12030VALUE rb_iseq_location(const struct rb_iseq_struct *iseq);
12031VALUE rb_sym_to_proc(VALUE sym);
12032
12033
12034VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
12035VALUE rb_reg_check_preprocess(VALUE);
12036long rb_reg_search0(VALUE, VALUE, long, int, int);
12037VALUE rb_reg_match_p(VALUE re, VALUE str, long pos);
12038_Bool rb_reg_start_with_p(VALUE re, VALUE str);
12039VALUE rb_reg_hash(VALUE re);
12040VALUE rb_reg_equal(VALUE re1, VALUE re2);
12041void rb_backref_set_string(VALUE string, long pos, long len);
12042void rb_match_unbusy(VALUE);
12043int rb_match_count(VALUE match);
12044int rb_match_nth_defined(int nth, VALUE match);
12045
12046
12047VALUE rb_reg_new_ary(VALUE ary, int options);
12048
12049
12050VALUE rb_to_symbol_type(VALUE obj);
12051VALUE rb_sym_intern(const char *ptr, long len, rb_encoding *enc);
12052VALUE rb_sym_intern_ascii(const char *ptr, long len);
12053VALUE rb_sym_intern_ascii_cstr(const char *ptr);
12054int rb_is_const_name(VALUE name);
12055int rb_is_class_name(VALUE name);
12056int rb_is_instance_name(VALUE name);
12057int rb_is_local_name(VALUE name);
12058__attribute__((__pure__)) int rb_is_const_sym(VALUE sym);
12059__attribute__((__pure__)) int rb_is_attrset_sym(VALUE sym);
12060ID rb_make_internal_id(void);
12061ID rb_make_temporary_id(size_t n);
12062void rb_gc_free_dsymbol(VALUE);
12063struct rb_thread_struct;
12064VALUE rb_obj_is_mutex(VALUE obj);
12065VALUE rb_suppress_tracing(VALUE (*func)(VALUE), VALUE arg);
12066void rb_thread_execute_interrupts(VALUE th);
12067VALUE rb_get_coverages(void);
12068int rb_get_coverage_mode(void);
12069VALUE rb_default_coverage(int);
12070VALUE rb_thread_shield_new(void);
12071VALUE rb_thread_shield_wait(VALUE self);
12072VALUE rb_thread_shield_release(VALUE self);
12073VALUE rb_thread_shield_destroy(VALUE self);
12074int rb_thread_to_be_killed(VALUE thread);
12075void rb_mutex_allow_trap(VALUE self, int val);
12076VALUE rb_uninterruptible(VALUE (*b_proc)(VALUE), VALUE data);
12077VALUE rb_mutex_owned_p(VALUE self);
12078int rb_thread_wait_for_single_fd(int fd, int events, struct timeval * timeout);
12079
12080
12081VALUE rb_thread_io_blocking_region(rb_blocking_function_t *func, void *data1, int fd);
12082int ruby_thread_has_gvl_p(void);
12083
12084
12085
12086
12087int rb_threadptr_execute_interrupts(struct rb_thread_struct *th, int blocking_timing);
12088
12089
12090typedef
12091 struct {
12092 unsigned long int nraddr;
12093 }
12094 OrigFn;
12095typedef
12096 enum { VG_USERREQ__RUNNING_ON_VALGRIND = 0x1001,
12097 VG_USERREQ__DISCARD_TRANSLATIONS = 0x1002,
12098 VG_USERREQ__CLIENT_CALL0 = 0x1101,
12099 VG_USERREQ__CLIENT_CALL1 = 0x1102,
12100 VG_USERREQ__CLIENT_CALL2 = 0x1103,
12101 VG_USERREQ__CLIENT_CALL3 = 0x1104,
12102 VG_USERREQ__COUNT_ERRORS = 0x1201,
12103 VG_USERREQ__GDB_MONITOR_COMMAND = 0x1202,
12104 VG_USERREQ__CLO_CHANGE = 0x1203,
12105 VG_USERREQ__MALLOCLIKE_BLOCK = 0x1301,
12106 VG_USERREQ__RESIZEINPLACE_BLOCK = 0x130b,
12107 VG_USERREQ__FREELIKE_BLOCK = 0x1302,
12108 VG_USERREQ__CREATE_MEMPOOL = 0x1303,
12109 VG_USERREQ__DESTROY_MEMPOOL = 0x1304,
12110 VG_USERREQ__MEMPOOL_ALLOC = 0x1305,
12111 VG_USERREQ__MEMPOOL_FREE = 0x1306,
12112 VG_USERREQ__MEMPOOL_TRIM = 0x1307,
12113 VG_USERREQ__MOVE_MEMPOOL = 0x1308,
12114 VG_USERREQ__MEMPOOL_CHANGE = 0x1309,
12115 VG_USERREQ__MEMPOOL_EXISTS = 0x130a,
12116 VG_USERREQ__PRINTF = 0x1401,
12117 VG_USERREQ__PRINTF_BACKTRACE = 0x1402,
12118 VG_USERREQ__PRINTF_VALIST_BY_REF = 0x1403,
12119 VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF = 0x1404,
12120 VG_USERREQ__STACK_REGISTER = 0x1501,
12121 VG_USERREQ__STACK_DEREGISTER = 0x1502,
12122 VG_USERREQ__STACK_CHANGE = 0x1503,
12123 VG_USERREQ__LOAD_PDB_DEBUGINFO = 0x1601,
12124 VG_USERREQ__MAP_IP_TO_SRCLOC = 0x1701,
12125 VG_USERREQ__CHANGE_ERR_DISABLEMENT = 0x1801,
12126 VG_USERREQ__VEX_INIT_FOR_IRI = 0x1901,
12127 VG_USERREQ__INNER_THREADS = 0x1902
12128 } Vg_ClientRequest;
12129static int VALGRIND_PRINTF(const char *format, ...)
12130 __attribute__((format(__printf__, 1, 2), __unused__));
12131static int
12132VALGRIND_PRINTF(const char *format, ...)
12133{
12134 unsigned long _qzz_res;
12135 va_list vargs;
12136 __builtin_va_start(vargs,format);
12137 _qzz_res = __extension__ ({ volatile unsigned long int _zzq_args[6]; volatile unsigned long int _zzq_result; _zzq_args[0] = (unsigned long int)(VG_USERREQ__PRINTF_VALIST_BY_REF); _zzq_args[1] = (unsigned long int)((unsigned long)format); _zzq_args[2] = (unsigned long int)((unsigned long)&vargs); _zzq_args[3] = (unsigned long int)(0); _zzq_args[4] = (unsigned long int)(0); _zzq_args[5] = (unsigned long int)(0); __asm__ volatile("rolq $3, %%rdi ; rolq $13, %%rdi\n\t" "rolq $61, %%rdi ; rolq $51, %%rdi\n\t" "xchgq %%rbx,%%rbx" : "=d" (_zzq_result) : "a" (&_zzq_args[0]), "0" (0) : "cc", "memory" ); _zzq_result; });
12138 __builtin_va_end(vargs);
12139 return (int)_qzz_res;
12140}
12141static int VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
12142 __attribute__((format(__printf__, 1, 2), __unused__));
12143static int
12144VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
12145{
12146 unsigned long _qzz_res;
12147 va_list vargs;
12148 __builtin_va_start(vargs,format);
12149 _qzz_res = __extension__ ({ volatile unsigned long int _zzq_args[6]; volatile unsigned long int _zzq_result; _zzq_args[0] = (unsigned long int)(VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF); _zzq_args[1] = (unsigned long int)((unsigned long)format); _zzq_args[2] = (unsigned long int)((unsigned long)&vargs); _zzq_args[3] = (unsigned long int)(0); _zzq_args[4] = (unsigned long int)(0); _zzq_args[5] = (unsigned long int)(0); __asm__ volatile("rolq $3, %%rdi ; rolq $13, %%rdi\n\t" "rolq $61, %%rdi ; rolq $51, %%rdi\n\t" "xchgq %%rbx,%%rbx" : "=d" (_zzq_result) : "a" (&_zzq_args[0]), "0" (0) : "cc", "memory" ); _zzq_result; });
12150 __builtin_va_end(vargs);
12151 return (int)_qzz_res;
12152}
12153typedef
12154 enum {
12155 VG_USERREQ__MAKE_MEM_NOACCESS = ((unsigned int)((('M')&0xff) << 24 | (('C')&0xff) << 16)),
12156 VG_USERREQ__MAKE_MEM_UNDEFINED,
12157 VG_USERREQ__MAKE_MEM_DEFINED,
12158 VG_USERREQ__DISCARD,
12159 VG_USERREQ__CHECK_MEM_IS_ADDRESSABLE,
12160 VG_USERREQ__CHECK_MEM_IS_DEFINED,
12161 VG_USERREQ__DO_LEAK_CHECK,
12162 VG_USERREQ__COUNT_LEAKS,
12163 VG_USERREQ__GET_VBITS,
12164 VG_USERREQ__SET_VBITS,
12165 VG_USERREQ__CREATE_BLOCK,
12166 VG_USERREQ__MAKE_MEM_DEFINED_IF_ADDRESSABLE,
12167 VG_USERREQ__COUNT_LEAK_BLOCKS,
12168 VG_USERREQ__ENABLE_ADDR_ERROR_REPORTING_IN_RANGE,
12169 VG_USERREQ__DISABLE_ADDR_ERROR_REPORTING_IN_RANGE,
12170 _VG_USERREQ__MEMCHECK_RECORD_OVERLAP_ERROR
12171 = ((unsigned int)((('M')&0xff) << 24 | (('C')&0xff) << 16)) + 256
12172 } Vg_MemCheckClientRequest;
12173typedef struct {
12174 int coverage_sandboxed;
12175 intptr_t coverage_fd;
12176 unsigned int coverage_max_block_size;
12177} __sanitizer_sandbox_arguments;
12178void __sanitizer_set_report_path(const char *path);
12179void __sanitizer_set_report_fd(void *fd);
12180void __sanitizer_sandbox_on_notify(__sanitizer_sandbox_arguments *args);
12181void __sanitizer_report_error_summary(const char *error_summary);
12182uint16_t __sanitizer_unaligned_load16(const void *p);
12183uint32_t __sanitizer_unaligned_load32(const void *p);
12184uint64_t __sanitizer_unaligned_load64(const void *p);
12185void __sanitizer_unaligned_store16(void *p, uint16_t x);
12186void __sanitizer_unaligned_store32(void *p, uint32_t x);
12187void __sanitizer_unaligned_store64(void *p, uint64_t x);
12188int __sanitizer_acquire_crash_state();
12189void __sanitizer_annotate_contiguous_container(const void *beg,
12190 const void *end,
12191 const void *old_mid,
12192 const void *new_mid);
12193int __sanitizer_verify_contiguous_container(const void *beg, const void *mid,
12194 const void *end);
12195const void *__sanitizer_contiguous_container_find_bad_address(const void *beg,
12196 const void *mid,
12197 const void *end);
12198void __sanitizer_print_stack_trace(void);
12199void __sanitizer_symbolize_pc(void *pc, const char *fmt, char *out_buf,
12200 size_t out_buf_size);
12201void __sanitizer_symbolize_global(void *data_ptr, const char *fmt,
12202 char *out_buf, size_t out_buf_size);
12203void __sanitizer_set_death_callback(void (*callback)(void));
12204void __sanitizer_weak_hook_memcmp(void *called_pc, const void *s1,
12205 const void *s2, size_t n, int result);
12206void __sanitizer_weak_hook_strncmp(void *called_pc, const char *s1,
12207 const char *s2, size_t n, int result);
12208void __sanitizer_weak_hook_strncasecmp(void *called_pc, const char *s1,
12209 const char *s2, size_t n, int result);
12210void __sanitizer_weak_hook_strcmp(void *called_pc, const char *s1,
12211 const char *s2, int result);
12212void __sanitizer_weak_hook_strcasecmp(void *called_pc, const char *s1,
12213 const char *s2, int result);
12214void __sanitizer_weak_hook_strstr(void *called_pc, const char *s1,
12215 const char *s2, char *result);
12216void __sanitizer_weak_hook_strcasestr(void *called_pc, const char *s1,
12217 const char *s2, char *result);
12218void __sanitizer_weak_hook_memmem(void *called_pc,
12219 const void *s1, size_t len1,
12220 const void *s2, size_t len2, void *result);
12221void __sanitizer_print_memory_profile(size_t top_percent,
12222 size_t max_number_of_contexts);
12223void __sanitizer_start_switch_fiber(void **fake_stack_save,
12224 const void *bottom, size_t size);
12225void __sanitizer_finish_switch_fiber(void *fake_stack_save,
12226 const void **bottom_old,
12227 size_t *size_old);
12228int __sanitizer_get_module_and_offset_for_pc(void *pc, char *module_path,
12229 size_t module_path_len,
12230 void **pc_offset);
12231void __asan_poison_memory_region(void const volatile *addr, size_t size);
12232void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
12233int __asan_address_is_poisoned(void const volatile *addr);
12234void *__asan_region_is_poisoned(void *beg, size_t size);
12235void __asan_describe_address(void *addr);
12236int __asan_report_present(void);
12237void *__asan_get_report_pc(void);
12238void *__asan_get_report_bp(void);
12239void *__asan_get_report_sp(void);
12240void *__asan_get_report_address(void);
12241int __asan_get_report_access_type(void);
12242size_t __asan_get_report_access_size(void);
12243const char *__asan_get_report_description(void);
12244const char *__asan_locate_address(void *addr, char *name, size_t name_size,
12245 void **region_address, size_t *region_size);
12246size_t __asan_get_alloc_stack(void *addr, void **trace, size_t size,
12247 int *thread_id);
12248size_t __asan_get_free_stack(void *addr, void **trace, size_t size,
12249 int *thread_id);
12250void __asan_get_shadow_mapping(size_t *shadow_scale, size_t *shadow_offset);
12251void __asan_report_error(void *pc, void *bp, void *sp,
12252 void *addr, int is_write, size_t access_size);
12253void __asan_set_death_callback(void (*callback)(void));
12254void __asan_set_error_report_callback(void (*callback)(const char *));
12255void __asan_on_error(void);
12256void __asan_print_accumulated_stats(void);
12257const char* __asan_default_options(void);
12258void *__asan_get_current_fake_stack(void);
12259void *__asan_addr_is_in_fake_stack(void *fake_stack, void *addr, void **beg,
12260 void **end);
12261void __asan_handle_no_return(void);
12262int __asan_update_allocation_context(void* addr);
12263extern const int ruby_api_version[];
12264extern const ID rb_iseq_shared_exc_local_tbl[];
12265static inline rb_snum_t
12266ISEQ_FLIP_CNT_INCREMENT(const rb_iseq_t *iseq)
12267{
12268 rb_snum_t cnt = iseq->body->variable.flip_count;
12269 iseq->body->variable.flip_count += 1;
12270 return cnt;
12271}
12272static inline VALUE *
12273ISEQ_ORIGINAL_ISEQ(const rb_iseq_t *iseq)
12274{
12275 return iseq->body->variable.original_iseq;
12276}
12277static inline void
12278ISEQ_ORIGINAL_ISEQ_CLEAR(const rb_iseq_t *iseq)
12279{
12280 void *ptr = iseq->body->variable.original_iseq;
12281 iseq->body->variable.original_iseq = ((void *)0);
12282 if (ptr) {
12283 ruby_xfree(ptr);
12284 }
12285}
12286static inline VALUE *
12287ISEQ_ORIGINAL_ISEQ_ALLOC(const rb_iseq_t *iseq, long size)
12288{
12289 return iseq->body->variable.original_iseq =
12290 ((VALUE *)ruby_xmalloc2((size), sizeof(VALUE)));
12291}
12292struct iseq_compile_data {
12293 const VALUE err_info;
12294 const VALUE catch_table_ary;
12295 struct iseq_label_data *start_label;
12296 struct iseq_label_data *end_label;
12297 struct iseq_label_data *redo_label;
12298 const rb_iseq_t *current_block;
12299 struct iseq_compile_data_ensure_node_stack *ensure_node_stack;
12300 struct {
12301 struct iseq_compile_data_storage *storage_head;
12302 struct iseq_compile_data_storage *storage_current;
12303 } node;
12304 struct {
12305 struct iseq_compile_data_storage *storage_head;
12306 struct iseq_compile_data_storage *storage_current;
12307 } insn;
12308 _Bool in_rescue;
12309 int loopval_popped;
12310 int last_line;
12311 int label_no;
12312 int node_level;
12313 int isolated_depth;
12314 unsigned int ci_index;
12315 const rb_compile_option_t *option;
12316 struct rb_id_table *ivar_cache_table;
12317 const struct rb_builtin_function *builtin_function_table;
12318 const NODE *root_node;
12319};
12320static inline struct iseq_compile_data *
12321ISEQ_COMPILE_DATA(const rb_iseq_t *iseq)
12322{
12323 if (iseq->flags & ((VALUE)RUBY_FL_USER6)) {
12324 return iseq->aux.compile_data;
12325 }
12326 else {
12327 return ((void *)0);
12328 }
12329}
12330static inline void
12331ISEQ_COMPILE_DATA_ALLOC(rb_iseq_t *iseq)
12332{
12333 iseq->aux.compile_data = (((struct iseq_compile_data *)ruby_xcalloc((1), sizeof(struct iseq_compile_data))));
12334 iseq->flags |= ((VALUE)RUBY_FL_USER6);
12335}
12336static inline void
12337ISEQ_COMPILE_DATA_CLEAR(rb_iseq_t *iseq)
12338{
12339 iseq->flags &= ~((VALUE)RUBY_FL_USER6);
12340 iseq->aux.compile_data = ((void *)0);
12341}
12342static inline rb_iseq_t *
12343iseq_imemo_alloc(void)
12344{
12345 return (rb_iseq_t *)rb_imemo_new(imemo_iseq, 0, 0, 0, 0);
12346}
12347VALUE rb_iseq_ibf_dump(const rb_iseq_t *iseq, VALUE opt);
12348void rb_ibf_load_iseq_complete(rb_iseq_t *iseq);
12349const rb_iseq_t *rb_iseq_ibf_load(VALUE str);
12350const rb_iseq_t *rb_iseq_ibf_load_bytes(const char *cstr, size_t);
12351VALUE rb_iseq_ibf_load_extra_data(VALUE str);
12352void rb_iseq_init_trace(rb_iseq_t *iseq);
12353int rb_iseq_add_local_tracepoint_recursively(const rb_iseq_t *iseq, rb_event_flag_t turnon_events, VALUE tpval, unsigned int target_line, _Bool target_bmethod);
12354int rb_iseq_remove_local_tracepoint_recursively(const rb_iseq_t *iseq, VALUE tpval);
12355const rb_iseq_t *rb_iseq_load_iseq(VALUE fname);
12356unsigned int *rb_iseq_insns_info_decode_positions(const struct rb_iseq_constant_body *body);
12357int rb_vm_insn_addr2opcode(const void *addr);
12358
12359
12360VALUE rb_iseq_compile_node(rb_iseq_t *iseq, const NODE *node);
12361VALUE rb_iseq_compile_callback(rb_iseq_t *iseq, const struct rb_iseq_new_with_callback_callback_func * ifunc);
12362VALUE *rb_iseq_original_iseq(const rb_iseq_t *iseq);
12363void rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE misc,
12364 VALUE locals, VALUE args,
12365 VALUE exception, VALUE body);
12366void rb_iseq_mark_insn_storage(struct iseq_compile_data_storage *arena);
12367VALUE rb_iseq_load(VALUE data, VALUE parent, VALUE opt);
12368VALUE rb_iseq_parameters(const rb_iseq_t *iseq, int is_proc);
12369unsigned int rb_iseq_line_no(const rb_iseq_t *iseq, size_t pos);
12370int rb_iseq_node_id(const rb_iseq_t *iseq, size_t pos);
12371void rb_iseq_trace_set(const rb_iseq_t *iseq, rb_event_flag_t turnon_events);
12372void rb_iseq_trace_set_all(rb_event_flag_t turnon_events);
12373void rb_iseq_insns_info_encode_positions(const rb_iseq_t *iseq);
12374struct rb_iseq_constant_body *rb_iseq_constant_body_alloc(void);
12375VALUE rb_iseqw_new(const rb_iseq_t *iseq);
12376const rb_iseq_t *rb_iseqw_to_iseq(VALUE iseqw);
12377VALUE rb_iseq_absolute_path(const rb_iseq_t *iseq);
12378int rb_iseq_from_eval_p(const rb_iseq_t *iseq);
12379VALUE rb_iseq_type(const rb_iseq_t *iseq);
12380VALUE rb_iseq_label(const rb_iseq_t *iseq);
12381VALUE rb_iseq_base_label(const rb_iseq_t *iseq);
12382VALUE rb_iseq_first_lineno(const rb_iseq_t *iseq);
12383VALUE rb_iseq_method_name(const rb_iseq_t *iseq);
12384void rb_iseq_code_location(const rb_iseq_t *iseq, int *first_lineno, int *first_column, int *last_lineno, int *last_column);
12385void rb_iseq_remove_coverage_all(void);
12386const rb_iseq_t *rb_method_iseq(VALUE body);
12387const rb_iseq_t *rb_proc_get_iseq(VALUE proc, int *is_proc);
12388struct rb_compile_option_struct {
12389 unsigned int inline_const_cache: 1;
12390 unsigned int peephole_optimization: 1;
12391 unsigned int tailcall_optimization: 1;
12392 unsigned int specialized_instruction: 1;
12393 unsigned int operands_unification: 1;
12394 unsigned int instructions_unification: 1;
12395 unsigned int stack_caching: 1;
12396 unsigned int frozen_string_literal: 1;
12397 unsigned int debug_frozen_string_literal: 1;
12398 unsigned int coverage_enabled: 1;
12399 int debug_level;
12400};
12401struct iseq_insn_info_entry {
12402 int line_no;
12403 int node_id;
12404 rb_event_flag_t events;
12405};
12406struct iseq_catch_table_entry {
12407 enum catch_type {
12408 CATCH_TYPE_RESCUE = __builtin_choose_expr( __builtin_constant_p(1), ((VALUE)(1)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(1)),
12409 CATCH_TYPE_ENSURE = __builtin_choose_expr( __builtin_constant_p(2), ((VALUE)(2)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(2)),
12410 CATCH_TYPE_RETRY = __builtin_choose_expr( __builtin_constant_p(3), ((VALUE)(3)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(3)),
12411 CATCH_TYPE_BREAK = __builtin_choose_expr( __builtin_constant_p(4), ((VALUE)(4)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(4)),
12412 CATCH_TYPE_REDO = __builtin_choose_expr( __builtin_constant_p(5), ((VALUE)(5)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(5)),
12413 CATCH_TYPE_NEXT = __builtin_choose_expr( __builtin_constant_p(6), ((VALUE)(6)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(6))
12414 } type;
12415 rb_iseq_t *iseq;
12416 unsigned int start;
12417 unsigned int end;
12418 unsigned int cont;
12419 unsigned int sp;
12420};
12421struct iseq_catch_table { unsigned int size; struct iseq_catch_table_entry entries[]; } __attribute__((packed));
12422static inline int
12423iseq_catch_table_bytes(int n)
12424{
12425 enum {
12426 catch_table_entry_size = sizeof(struct iseq_catch_table_entry),
12427 catch_table_entries_max = (0x7fffffff - __builtin_offsetof (struct iseq_catch_table, entries)) / catch_table_entry_size
12428 };
12429 if (n > catch_table_entries_max) rb_fatal("too large iseq_catch_table - %d", n);
12430 return (int)(__builtin_offsetof (struct iseq_catch_table, entries) +
12431 n * catch_table_entry_size);
12432}
12433struct iseq_compile_data_storage {
12434 struct iseq_compile_data_storage *next;
12435 unsigned int pos;
12436 unsigned int size;
12437 char buff[];
12438};
12439enum defined_type {
12440 DEFINED_NOT_DEFINED,
12441 DEFINED_NIL = 1,
12442 DEFINED_IVAR,
12443 DEFINED_LVAR,
12444 DEFINED_GVAR,
12445 DEFINED_CVAR,
12446 DEFINED_CONST,
12447 DEFINED_METHOD,
12448 DEFINED_YIELD,
12449 DEFINED_ZSUPER,
12450 DEFINED_SELF,
12451 DEFINED_TRUE,
12452 DEFINED_FALSE,
12453 DEFINED_ASGN,
12454 DEFINED_EXPR,
12455 DEFINED_REF,
12456 DEFINED_FUNC,
12457 DEFINED_CONST_FROM
12458};
12459VALUE rb_iseq_defined_string(enum defined_type type);
12460VALUE rb_iseq_local_variables(const rb_iseq_t *iseq);
12461
12462
12463enum rb_debug_counter_type {
12464RB_DEBUG_COUNTER_mc_inline_hit,
12465RB_DEBUG_COUNTER_mc_inline_miss_klass,
12466RB_DEBUG_COUNTER_mc_inline_miss_invalidated,
12467RB_DEBUG_COUNTER_mc_inline_miss_empty,
12468RB_DEBUG_COUNTER_mc_inline_miss_same_cc,
12469RB_DEBUG_COUNTER_mc_inline_miss_same_cme,
12470RB_DEBUG_COUNTER_mc_inline_miss_same_def,
12471RB_DEBUG_COUNTER_mc_inline_miss_diff,
12472RB_DEBUG_COUNTER_cvar_write_inline_hit,
12473RB_DEBUG_COUNTER_cvar_read_inline_hit,
12474RB_DEBUG_COUNTER_cvar_inline_miss,
12475RB_DEBUG_COUNTER_cvar_class_invalidate,
12476RB_DEBUG_COUNTER_cvar_include_invalidate,
12477RB_DEBUG_COUNTER_mc_cme_complement,
12478RB_DEBUG_COUNTER_mc_cme_complement_hit,
12479RB_DEBUG_COUNTER_mc_search,
12480RB_DEBUG_COUNTER_mc_search_notfound,
12481RB_DEBUG_COUNTER_mc_search_super,
12482RB_DEBUG_COUNTER_ci_packed,
12483RB_DEBUG_COUNTER_ci_kw,
12484RB_DEBUG_COUNTER_ci_nokw,
12485RB_DEBUG_COUNTER_ci_runtime,
12486RB_DEBUG_COUNTER_cc_new,
12487RB_DEBUG_COUNTER_cc_temp,
12488RB_DEBUG_COUNTER_cc_found_in_ccs,
12489RB_DEBUG_COUNTER_cc_not_found_in_ccs,
12490RB_DEBUG_COUNTER_cc_ent_invalidate,
12491RB_DEBUG_COUNTER_cc_cme_invalidate,
12492RB_DEBUG_COUNTER_cc_invalidate_leaf,
12493RB_DEBUG_COUNTER_cc_invalidate_leaf_ccs,
12494RB_DEBUG_COUNTER_cc_invalidate_leaf_callable,
12495RB_DEBUG_COUNTER_cc_invalidate_tree,
12496RB_DEBUG_COUNTER_cc_invalidate_tree_cme,
12497RB_DEBUG_COUNTER_cc_invalidate_tree_callable,
12498RB_DEBUG_COUNTER_cc_invalidate_negative,
12499RB_DEBUG_COUNTER_ccs_free,
12500RB_DEBUG_COUNTER_ccs_maxlen,
12501RB_DEBUG_COUNTER_ccs_found,
12502RB_DEBUG_COUNTER_ccs_not_found,
12503RB_DEBUG_COUNTER_call0_public,
12504RB_DEBUG_COUNTER_call0_other,
12505RB_DEBUG_COUNTER_gccct_hit,
12506RB_DEBUG_COUNTER_gccct_miss,
12507RB_DEBUG_COUNTER_gccct_null,
12508RB_DEBUG_COUNTER_iseq_num,
12509RB_DEBUG_COUNTER_iseq_cd_num,
12510RB_DEBUG_COUNTER_ccf_general,
12511RB_DEBUG_COUNTER_ccf_iseq_setup,
12512RB_DEBUG_COUNTER_ccf_iseq_setup_0start,
12513RB_DEBUG_COUNTER_ccf_iseq_setup_tailcall_0start,
12514RB_DEBUG_COUNTER_ccf_iseq_fix,
12515RB_DEBUG_COUNTER_ccf_iseq_opt,
12516RB_DEBUG_COUNTER_ccf_iseq_kw1,
12517RB_DEBUG_COUNTER_ccf_iseq_kw2,
12518RB_DEBUG_COUNTER_ccf_cfunc,
12519RB_DEBUG_COUNTER_ccf_cfunc_with_frame,
12520RB_DEBUG_COUNTER_ccf_ivar,
12521RB_DEBUG_COUNTER_ccf_attrset,
12522RB_DEBUG_COUNTER_ccf_method_missing,
12523RB_DEBUG_COUNTER_ccf_zsuper,
12524RB_DEBUG_COUNTER_ccf_bmethod,
12525RB_DEBUG_COUNTER_ccf_opt_send,
12526RB_DEBUG_COUNTER_ccf_opt_call,
12527RB_DEBUG_COUNTER_ccf_opt_block_call,
12528RB_DEBUG_COUNTER_ccf_opt_struct_aref,
12529RB_DEBUG_COUNTER_ccf_opt_struct_aset,
12530RB_DEBUG_COUNTER_ccf_super_method,
12531RB_DEBUG_COUNTER_frame_push,
12532RB_DEBUG_COUNTER_frame_push_method,
12533RB_DEBUG_COUNTER_frame_push_block,
12534RB_DEBUG_COUNTER_frame_push_class,
12535RB_DEBUG_COUNTER_frame_push_top,
12536RB_DEBUG_COUNTER_frame_push_cfunc,
12537RB_DEBUG_COUNTER_frame_push_ifunc,
12538RB_DEBUG_COUNTER_frame_push_eval,
12539RB_DEBUG_COUNTER_frame_push_rescue,
12540RB_DEBUG_COUNTER_frame_push_dummy,
12541RB_DEBUG_COUNTER_frame_R2R,
12542RB_DEBUG_COUNTER_frame_R2C,
12543RB_DEBUG_COUNTER_frame_C2C,
12544RB_DEBUG_COUNTER_frame_C2R,
12545RB_DEBUG_COUNTER_ivar_get_ic_hit,
12546RB_DEBUG_COUNTER_ivar_get_ic_miss,
12547RB_DEBUG_COUNTER_ivar_get_ic_miss_serial,
12548RB_DEBUG_COUNTER_ivar_get_ic_miss_unset,
12549RB_DEBUG_COUNTER_ivar_get_ic_miss_noobject,
12550RB_DEBUG_COUNTER_ivar_set_ic_hit,
12551RB_DEBUG_COUNTER_ivar_set_ic_miss,
12552RB_DEBUG_COUNTER_ivar_set_ic_miss_serial,
12553RB_DEBUG_COUNTER_ivar_set_ic_miss_unset,
12554RB_DEBUG_COUNTER_ivar_set_ic_miss_iv_hit,
12555RB_DEBUG_COUNTER_ivar_set_ic_miss_noobject,
12556RB_DEBUG_COUNTER_ivar_get_base,
12557RB_DEBUG_COUNTER_ivar_set_base,
12558RB_DEBUG_COUNTER_lvar_get,
12559RB_DEBUG_COUNTER_lvar_get_dynamic,
12560RB_DEBUG_COUNTER_lvar_set,
12561RB_DEBUG_COUNTER_lvar_set_dynamic,
12562RB_DEBUG_COUNTER_lvar_set_slowpath,
12563RB_DEBUG_COUNTER_gc_count,
12564RB_DEBUG_COUNTER_gc_minor_newobj,
12565RB_DEBUG_COUNTER_gc_minor_malloc,
12566RB_DEBUG_COUNTER_gc_minor_method,
12567RB_DEBUG_COUNTER_gc_minor_capi,
12568RB_DEBUG_COUNTER_gc_minor_stress,
12569RB_DEBUG_COUNTER_gc_major_nofree,
12570RB_DEBUG_COUNTER_gc_major_oldgen,
12571RB_DEBUG_COUNTER_gc_major_shady,
12572RB_DEBUG_COUNTER_gc_major_force,
12573RB_DEBUG_COUNTER_gc_major_oldmalloc,
12574RB_DEBUG_COUNTER_gc_enter_start,
12575RB_DEBUG_COUNTER_gc_enter_mark_continue,
12576RB_DEBUG_COUNTER_gc_enter_sweep_continue,
12577RB_DEBUG_COUNTER_gc_enter_rest,
12578RB_DEBUG_COUNTER_gc_enter_finalizer,
12579RB_DEBUG_COUNTER_gc_isptr_trial,
12580RB_DEBUG_COUNTER_gc_isptr_range,
12581RB_DEBUG_COUNTER_gc_isptr_align,
12582RB_DEBUG_COUNTER_gc_isptr_maybe,
12583RB_DEBUG_COUNTER_obj_newobj,
12584RB_DEBUG_COUNTER_obj_newobj_slowpath,
12585RB_DEBUG_COUNTER_obj_newobj_wb_unprotected,
12586RB_DEBUG_COUNTER_obj_free,
12587RB_DEBUG_COUNTER_obj_promote,
12588RB_DEBUG_COUNTER_obj_wb_unprotect,
12589RB_DEBUG_COUNTER_obj_obj_embed,
12590RB_DEBUG_COUNTER_obj_obj_transient,
12591RB_DEBUG_COUNTER_obj_obj_ptr,
12592RB_DEBUG_COUNTER_obj_str_ptr,
12593RB_DEBUG_COUNTER_obj_str_embed,
12594RB_DEBUG_COUNTER_obj_str_shared,
12595RB_DEBUG_COUNTER_obj_str_nofree,
12596RB_DEBUG_COUNTER_obj_str_fstr,
12597RB_DEBUG_COUNTER_obj_ary_embed,
12598RB_DEBUG_COUNTER_obj_ary_transient,
12599RB_DEBUG_COUNTER_obj_ary_ptr,
12600RB_DEBUG_COUNTER_obj_ary_extracapa,
12601RB_DEBUG_COUNTER_obj_ary_shared_create,
12602RB_DEBUG_COUNTER_obj_ary_shared,
12603RB_DEBUG_COUNTER_obj_ary_shared_root_occupied,
12604RB_DEBUG_COUNTER_obj_hash_empty,
12605RB_DEBUG_COUNTER_obj_hash_1,
12606RB_DEBUG_COUNTER_obj_hash_2,
12607RB_DEBUG_COUNTER_obj_hash_3,
12608RB_DEBUG_COUNTER_obj_hash_4,
12609RB_DEBUG_COUNTER_obj_hash_5_8,
12610RB_DEBUG_COUNTER_obj_hash_g8,
12611RB_DEBUG_COUNTER_obj_hash_null,
12612RB_DEBUG_COUNTER_obj_hash_ar,
12613RB_DEBUG_COUNTER_obj_hash_st,
12614RB_DEBUG_COUNTER_obj_hash_transient,
12615RB_DEBUG_COUNTER_obj_hash_force_convert,
12616RB_DEBUG_COUNTER_obj_struct_embed,
12617RB_DEBUG_COUNTER_obj_struct_transient,
12618RB_DEBUG_COUNTER_obj_struct_ptr,
12619RB_DEBUG_COUNTER_obj_data_empty,
12620RB_DEBUG_COUNTER_obj_data_xfree,
12621RB_DEBUG_COUNTER_obj_data_imm_free,
12622RB_DEBUG_COUNTER_obj_data_zombie,
12623RB_DEBUG_COUNTER_obj_match_under4,
12624RB_DEBUG_COUNTER_obj_match_ge4,
12625RB_DEBUG_COUNTER_obj_match_ge8,
12626RB_DEBUG_COUNTER_obj_match_ptr,
12627RB_DEBUG_COUNTER_obj_iclass_ptr,
12628RB_DEBUG_COUNTER_obj_class_ptr,
12629RB_DEBUG_COUNTER_obj_module_ptr,
12630RB_DEBUG_COUNTER_obj_bignum_ptr,
12631RB_DEBUG_COUNTER_obj_bignum_embed,
12632RB_DEBUG_COUNTER_obj_float,
12633RB_DEBUG_COUNTER_obj_complex,
12634RB_DEBUG_COUNTER_obj_rational,
12635RB_DEBUG_COUNTER_obj_regexp_ptr,
12636RB_DEBUG_COUNTER_obj_file_ptr,
12637RB_DEBUG_COUNTER_obj_symbol,
12638RB_DEBUG_COUNTER_obj_imemo_ment,
12639RB_DEBUG_COUNTER_obj_imemo_iseq,
12640RB_DEBUG_COUNTER_obj_imemo_env,
12641RB_DEBUG_COUNTER_obj_imemo_tmpbuf,
12642RB_DEBUG_COUNTER_obj_imemo_ast,
12643RB_DEBUG_COUNTER_obj_imemo_cref,
12644RB_DEBUG_COUNTER_obj_imemo_svar,
12645RB_DEBUG_COUNTER_obj_imemo_throw_data,
12646RB_DEBUG_COUNTER_obj_imemo_ifunc,
12647RB_DEBUG_COUNTER_obj_imemo_memo,
12648RB_DEBUG_COUNTER_obj_imemo_parser_strterm,
12649RB_DEBUG_COUNTER_obj_imemo_callinfo,
12650RB_DEBUG_COUNTER_obj_imemo_callcache,
12651RB_DEBUG_COUNTER_obj_imemo_constcache,
12652RB_DEBUG_COUNTER_artable_hint_hit,
12653RB_DEBUG_COUNTER_artable_hint_miss,
12654RB_DEBUG_COUNTER_artable_hint_notfound,
12655RB_DEBUG_COUNTER_heap_xmalloc,
12656RB_DEBUG_COUNTER_heap_xrealloc,
12657RB_DEBUG_COUNTER_heap_xfree,
12658RB_DEBUG_COUNTER_theap_alloc,
12659RB_DEBUG_COUNTER_theap_alloc_fail,
12660RB_DEBUG_COUNTER_theap_evacuate,
12661RB_DEBUG_COUNTER_vm_sync_lock,
12662RB_DEBUG_COUNTER_vm_sync_lock_enter,
12663RB_DEBUG_COUNTER_vm_sync_lock_enter_nb,
12664RB_DEBUG_COUNTER_vm_sync_lock_enter_cr,
12665RB_DEBUG_COUNTER_vm_sync_barrier,
12666RB_DEBUG_COUNTER_mjit_exec,
12667RB_DEBUG_COUNTER_mjit_exec_not_added,
12668RB_DEBUG_COUNTER_mjit_exec_not_ready,
12669RB_DEBUG_COUNTER_mjit_exec_not_compiled,
12670RB_DEBUG_COUNTER_mjit_exec_call_func,
12671RB_DEBUG_COUNTER_mjit_add_iseq_to_process,
12672RB_DEBUG_COUNTER_mjit_unload_units,
12673RB_DEBUG_COUNTER_mjit_frame_VM2VM,
12674RB_DEBUG_COUNTER_mjit_frame_VM2JT,
12675RB_DEBUG_COUNTER_mjit_frame_JT2JT,
12676RB_DEBUG_COUNTER_mjit_frame_JT2VM,
12677RB_DEBUG_COUNTER_mjit_cancel,
12678RB_DEBUG_COUNTER_mjit_cancel_ivar_inline,
12679RB_DEBUG_COUNTER_mjit_cancel_exivar_inline,
12680RB_DEBUG_COUNTER_mjit_cancel_send_inline,
12681RB_DEBUG_COUNTER_mjit_cancel_opt_insn,
12682RB_DEBUG_COUNTER_mjit_cancel_invalidate_all,
12683RB_DEBUG_COUNTER_mjit_cancel_leave,
12684RB_DEBUG_COUNTER_mjit_length_unit_queue,
12685RB_DEBUG_COUNTER_mjit_length_active_units,
12686RB_DEBUG_COUNTER_mjit_length_compact_units,
12687RB_DEBUG_COUNTER_mjit_length_stale_units,
12688RB_DEBUG_COUNTER_mjit_compile_failures,
12689 RB_DEBUG_COUNTER_MAX
12690};
12691void rb_debug_counter_show_results(const char *msg);
12692
12693
12694size_t ruby_debug_counter_get(const char **names_ptr, size_t *counters_ptr);
12695void ruby_debug_counter_reset(void);
12696void ruby_debug_counter_show_at_exit(int enable);
12697
12698
12699struct rb_yjit_options {
12700 _Bool yjit_enabled;
12701 unsigned exec_mem_size;
12702 unsigned call_threshold;
12703 _Bool greedy_versioning;
12704 _Bool no_type_prop;
12705 unsigned max_versions;
12706 _Bool gen_stats;
12707 _Bool test_backend;
12708};
12709_Bool rb_yjit_enabled_p(void);
12710unsigned rb_yjit_call_threshold(void);
12711void rb_yjit_invalidate_all_method_lookup_assumptions(void);
12712void rb_yjit_method_lookup_change(VALUE klass, ID mid);
12713void rb_yjit_cme_invalidate(VALUE cme);
12714void rb_yjit_collect_vm_usage_insn(int insn);
12715void rb_yjit_collect_binding_alloc(void);
12716void rb_yjit_collect_binding_set(void);
12717_Bool rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec);
12718void rb_yjit_init(struct rb_yjit_options *options);
12719void rb_yjit_bop_redefined(VALUE klass, const rb_method_entry_t *me, enum ruby_basic_operators bop);
12720void rb_yjit_constant_state_changed(void);
12721void rb_yjit_iseq_mark(const struct rb_iseq_constant_body *body);
12722void rb_yjit_iseq_update_references(const struct rb_iseq_constant_body *body);
12723void rb_yjit_iseq_free(const struct rb_iseq_constant_body *body);
12724void rb_yjit_before_ractor_spawn(void);
12725void rb_yjit_constant_ic_update(const rb_iseq_t *const iseq, IC ic);
12726void rb_yjit_tracing_invalidate_all(void);
12727enum rb_mjit_iseq_func {
12728 NOT_ADDED_JIT_ISEQ_FUNC = 0,
12729 NOT_READY_JIT_ISEQ_FUNC = 1,
12730 NOT_COMPILED_JIT_ISEQ_FUNC = 2,
12731 LAST_JIT_ISEQ_FUNC = 3
12732};
12733struct mjit_options {
12734 char on;
12735 char save_temps;
12736 char warnings;
12737 char debug;
12738 char* debug_flags;
12739 unsigned int wait;
12740 unsigned int min_calls;
12741 int verbose;
12742 int max_cache_size;
12743};
12744struct rb_mjit_compile_info {
12745 _Bool disable_ivar_cache;
12746 _Bool disable_exivar_cache;
12747 _Bool disable_send_cache;
12748 _Bool disable_inlining;
12749 _Bool disable_const_cache;
12750};
12751typedef VALUE (*mjit_func_t)(rb_execution_context_t *, rb_control_frame_t *);
12752
12753
12754extern struct mjit_options mjit_opts;
12755extern _Bool mjit_call_p;
12756extern void rb_mjit_add_iseq_to_process(const rb_iseq_t *iseq);
12757extern VALUE rb_mjit_wait_call(rb_execution_context_t *ec, struct rb_iseq_constant_body *body);
12758extern struct rb_mjit_compile_info* rb_mjit_iseq_compile_info(const struct rb_iseq_constant_body *body);
12759extern void rb_mjit_recompile_send(const rb_iseq_t *iseq);
12760extern void rb_mjit_recompile_ivar(const rb_iseq_t *iseq);
12761extern void rb_mjit_recompile_exivar(const rb_iseq_t *iseq);
12762extern void rb_mjit_recompile_inlining(const rb_iseq_t *iseq);
12763extern void rb_mjit_recompile_const(const rb_iseq_t *iseq);
12764
12765
12766extern void mjit_cancel_all(const char *reason);
12767extern _Bool mjit_compile(FILE *f, const rb_iseq_t *iseq, const char *funcname, int id);
12768extern void mjit_init(const struct mjit_options *opts);
12769extern void mjit_gc_start_hook(void);
12770extern void mjit_gc_exit_hook(void);
12771extern void mjit_free_iseq(const rb_iseq_t *iseq);
12772extern void mjit_update_references(const rb_iseq_t *iseq);
12773extern void mjit_mark(void);
12774extern struct mjit_cont *mjit_cont_new(rb_execution_context_t *ec);
12775extern void mjit_cont_free(struct mjit_cont *cont);
12776extern void mjit_mark_cc_entries(const struct rb_iseq_constant_body *const body);
12777__attribute__((__noinline__)) static __attribute__((__cold__)) VALUE mjit_exec_slowpath(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_iseq_constant_body *body);
12778static VALUE
12779mjit_exec_slowpath(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_iseq_constant_body *body)
12780{
12781 uintptr_t func_i = (uintptr_t)(body->jit_func);
12782 ((__builtin_expect(!!(!!(func_i <= LAST_JIT_ISEQ_FUNC)), 1)) ? ((void)0) : __builtin_unreachable());
12783 switch ((enum rb_mjit_iseq_func)func_i) {
12784 case NOT_ADDED_JIT_ISEQ_FUNC:
12785 ((void)0);
12786 if (body->total_calls == mjit_opts.min_calls) {
12787 rb_mjit_add_iseq_to_process(iseq);
12788 if ((__builtin_expect(!!(mjit_opts.wait), 0))) {
12789 return rb_mjit_wait_call(ec, body);
12790 }
12791 }
12792 break;
12793 case NOT_READY_JIT_ISEQ_FUNC:
12794 ((void)0);
12795 break;
12796 case NOT_COMPILED_JIT_ISEQ_FUNC:
12797 ((void)0);
12798 break;
12799 default:
12800 break;
12801 }
12802 return ((VALUE)RUBY_Qundef);
12803}
12804static inline VALUE
12805mjit_exec(rb_execution_context_t *ec)
12806{
12807 const rb_iseq_t *iseq = ec->cfp->iseq;
12808 struct rb_iseq_constant_body *body = iseq->body;
12809 _Bool yjit_enabled = 0;
12810 if (mjit_call_p || yjit_enabled) {
12811 body->total_calls++;
12812 }
12813 if (!(mjit_call_p || yjit_enabled))
12814 return ((VALUE)RUBY_Qundef);
12815 ((void)0);
12816 mjit_func_t func = body->jit_func;
12817 if (yjit_enabled && func == 0) {
12818 return ((VALUE)RUBY_Qundef);
12819 }
12820 if ((__builtin_expect(!!((uintptr_t)func <= LAST_JIT_ISEQ_FUNC), 0))) {
12821 ((void)0);
12822 return mjit_exec_slowpath(ec, iseq, body);
12823 }
12824 ((void)0);
12825 ((void)0);
12826 return func(ec, ec->cfp);
12827}
12828void mjit_child_after_fork(void);
12829VALUE mjit_pause(_Bool wait_p);
12830VALUE mjit_resume(void);
12831void mjit_finish(_Bool close_handle_p);
12832
12833
12834typedef struct rb_vm_struct ruby_vm_t;
12835int ruby_vm_destruct(ruby_vm_t *vm);
12836void ruby_vm_at_exit(void(*func)(ruby_vm_t *));
12837
12838
12839enum vm_call_flag_bits {
12840 VM_CALL_ARGS_SPLAT_bit,
12841 VM_CALL_ARGS_BLOCKARG_bit,
12842 VM_CALL_FCALL_bit,
12843 VM_CALL_VCALL_bit,
12844 VM_CALL_ARGS_SIMPLE_bit,
12845 VM_CALL_BLOCKISEQ_bit,
12846 VM_CALL_KWARG_bit,
12847 VM_CALL_KW_SPLAT_bit,
12848 VM_CALL_TAILCALL_bit,
12849 VM_CALL_SUPER_bit,
12850 VM_CALL_ZSUPER_bit,
12851 VM_CALL_OPT_SEND_bit,
12852 VM_CALL_KW_SPLAT_MUT_bit,
12853 VM_CALL__END
12854};
12855struct rb_callinfo_kwarg {
12856 int keyword_len;
12857 VALUE keywords[];
12858};
12859static inline size_t
12860rb_callinfo_kwarg_bytes(int keyword_len)
12861{
12862 return rb_size_mul_add_or_raise(
12863 keyword_len,
12864 sizeof(VALUE),
12865 sizeof(struct rb_callinfo_kwarg),
12866 rb_eRuntimeError);
12867}
12868struct rb_callinfo {
12869 VALUE flags;
12870 const struct rb_callinfo_kwarg *kwarg;
12871 VALUE mid;
12872 VALUE flag;
12873 VALUE argc;
12874};
12875static inline _Bool
12876vm_ci_packed_p(const struct rb_callinfo *ci)
12877{
12878 if ((__builtin_expect(!!(((VALUE)ci) & 0x01), 1))) {
12879 return 1;
12880 }
12881 else {
12882 ((void)0);
12883 return 0;
12884 }
12885}
12886static inline _Bool
12887vm_ci_p(const struct rb_callinfo *ci)
12888{
12889 if (vm_ci_packed_p(ci) || imemo_type_p((VALUE)ci, imemo_callinfo)) {
12890 return 1;
12891 }
12892 else {
12893 return 0;
12894 }
12895}
12896static inline ID
12897vm_ci_mid(const struct rb_callinfo *ci)
12898{
12899 if (vm_ci_packed_p(ci)) {
12900 return (((VALUE)ci) >> (1 + 15 + 16)) & ((((VALUE)1)<<32) - 1);
12901 }
12902 else {
12903 return (ID)ci->mid;
12904 }
12905}
12906static inline unsigned int
12907vm_ci_flag(const struct rb_callinfo *ci)
12908{
12909 if (vm_ci_packed_p(ci)) {
12910 return (unsigned int)((((VALUE)ci) >> (1 + 15)) & ((((VALUE)1)<<16) - 1));
12911 }
12912 else {
12913 return (unsigned int)ci->flag;
12914 }
12915}
12916static inline unsigned int
12917vm_ci_argc(const struct rb_callinfo *ci)
12918{
12919 if (vm_ci_packed_p(ci)) {
12920 return (unsigned int)((((VALUE)ci) >> (1)) & ((((VALUE)1)<<15) - 1));
12921 }
12922 else {
12923 return (unsigned int)ci->argc;
12924 }
12925}
12926static inline const struct rb_callinfo_kwarg *
12927vm_ci_kwarg(const struct rb_callinfo *ci)
12928{
12929 if (vm_ci_packed_p(ci)) {
12930 return ((void *)0);
12931 }
12932 else {
12933 return ci->kwarg;
12934 }
12935}
12936static inline void
12937vm_ci_dump(const struct rb_callinfo *ci)
12938{
12939 if (vm_ci_packed_p(ci)) {
12940 ruby_debug_printf("packed_ci ID:%s flag:%x argc:%u\n",
12941 rb_id2name(vm_ci_mid(ci)), vm_ci_flag(ci), vm_ci_argc(ci));
12942 }
12943 else {
12944 rb_obj_info_dump_loc((VALUE)(ci), "./vm_callinfo.h", 175, __func__);
12945 }
12946}
12947static inline const struct rb_callinfo *
12948vm_ci_new_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
12949{
12950 if ((((mid ) & ~((((VALUE)1)<<32) - 1)) ? 0 : ((flag) & ~((((VALUE)1)<<16) - 1)) ? 0 : ((argc) & ~((((VALUE)1)<<15) - 1)) ? 0 : (kwarg) ? 0 : 1)) {
12951 ((void)0);
12952 return ((const struct rb_callinfo *) ((((VALUE)(mid )) << (1 + 15 + 16)) | (((VALUE)(flag)) << (1 + 15)) | (((VALUE)(argc)) << (1)) | RUBY_FIXNUM_FLAG));
12953 }
12954 const _Bool debug = 0;
12955 if (debug) ruby_debug_printf("%s:%d ", file, line);
12956 const struct rb_callinfo *ci = (const struct rb_callinfo *)
12957 rb_imemo_new(imemo_callinfo,
12958 (VALUE)mid,
12959 (VALUE)flag,
12960 (VALUE)argc,
12961 (VALUE)kwarg);
12962 if (debug) rb_obj_info_dump_loc((VALUE)(ci), "./vm_callinfo.h", 216, __func__);
12963 if (kwarg) {
12964 ((void)0);
12965 }
12966 else {
12967 ((void)0);
12968 }
12969 ((void)0);
12970 ((void)0);
12971 return ci;
12972}
12973static inline const struct rb_callinfo *
12974vm_ci_new_runtime_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
12975{
12976 ((void)0);
12977 return vm_ci_new_(mid, flag, argc, kwarg, file, line);
12978}
12979static inline _Bool
12980vm_ci_markable(const struct rb_callinfo *ci)
12981{
12982 if (! ci) {
12983 return 0;
12984 }
12985 else if (vm_ci_packed_p(ci)) {
12986 return 1;
12987 }
12988 else {
12989 ((void)0);
12990 return ! RB_FL_ANY_RAW((VALUE)ci, ((VALUE)RUBY_FL_USER4));
12991 }
12992}
12993typedef VALUE (*vm_call_handler)(
12994 struct rb_execution_context_struct *ec,
12995 struct rb_control_frame_struct *cfp,
12996 struct rb_calling_info *calling);
12997struct rb_callcache {
12998 const VALUE flags;
12999 const VALUE klass;
13000 const struct rb_callable_method_entry_struct * const cme_;
13001 const vm_call_handler call_;
13002 union {
13003 const unsigned int attr_index;
13004 const enum method_missing_reason method_missing_reason;
13005 VALUE v;
13006 } aux_;
13007};
13008static inline const struct rb_callcache *
13009vm_cc_new(VALUE klass,
13010 const struct rb_callable_method_entry_struct *cme,
13011 vm_call_handler call)
13012{
13013 const struct rb_callcache *cc = (const struct rb_callcache *)rb_imemo_new(imemo_callcache, (VALUE)cme, (VALUE)call, 0, klass);
13014 ((void)0);
13015 return cc;
13016}
13017static inline _Bool
13018vm_cc_class_check(const struct rb_callcache *cc, VALUE klass)
13019{
13020 ((void)0);
13021 ((void)0);
13022 return cc->klass == klass;
13023}
13024static inline int
13025vm_cc_markable(const struct rb_callcache *cc)
13026{
13027 ((void)0);
13028 return RB_FL_TEST_RAW((VALUE)cc, ((VALUE)RUBY_FL_USER4)) == 0;
13029}
13030static inline const struct rb_callable_method_entry_struct *
13031vm_cc_cme(const struct rb_callcache *cc)
13032{
13033 ((void)0);
13034 ((void)0);
13035 return cc->cme_;
13036}
13037static inline vm_call_handler
13038vm_cc_call(const struct rb_callcache *cc)
13039{
13040 ((void)0);
13041 ((void)0);
13042 return cc->call_;
13043}
13044static inline unsigned int
13045vm_cc_attr_index(const struct rb_callcache *cc)
13046{
13047 ((void)0);
13048 return cc->aux_.attr_index;
13049}
13050static inline unsigned int
13051vm_cc_cmethod_missing_reason(const struct rb_callcache *cc)
13052{
13053 ((void)0);
13054 return cc->aux_.method_missing_reason;
13055}
13056static inline _Bool
13057vm_cc_invalidated_p(const struct rb_callcache *cc)
13058{
13059 if (cc->klass && !((vm_cc_cme(cc))->flags & ((VALUE)RUBY_FL_USER9))) {
13060 return 0;
13061 }
13062 else {
13063 return 1;
13064 }
13065}
13066static inline _Bool
13067vm_cc_valid_p(const struct rb_callcache *cc, const rb_callable_method_entry_t *cc_cme, VALUE klass)
13068{
13069 ((void)0);
13070 if (cc->klass == klass && !((cc_cme)->flags & ((VALUE)RUBY_FL_USER9))) {
13071 return 1;
13072 }
13073 else {
13074 return 0;
13075 }
13076}
13077extern const struct rb_callcache *rb_vm_empty_cc(void);
13078extern const struct rb_callcache *rb_vm_empty_cc_for_super(void);
13079static inline void
13080vm_cc_call_set(const struct rb_callcache *cc, vm_call_handler call)
13081{
13082 ((void)0);
13083 ((void)0);
13084 *(vm_call_handler *)&cc->call_ = call;
13085}
13086static inline void
13087vm_cc_attr_index_set(const struct rb_callcache *cc, int index)
13088{
13089 ((void)0);
13090 ((void)0);
13091 *(int *)&cc->aux_.attr_index = index;
13092}
13093static inline void
13094vm_cc_method_missing_reason_set(const struct rb_callcache *cc, enum method_missing_reason reason)
13095{
13096 ((void)0);
13097 ((void)0);
13098 *(enum method_missing_reason *)&cc->aux_.method_missing_reason = reason;
13099}
13100static inline void
13101vm_cc_invalidate(const struct rb_callcache *cc)
13102{
13103 ((void)0);
13104 ((void)0);
13105 ((void)0);
13106 *(VALUE *)&cc->klass = 0;
13107 ((void)0);
13108}
13109struct rb_call_data {
13110 const struct rb_callinfo *ci;
13111 const struct rb_callcache *cc;
13112};
13113struct rb_class_cc_entries {
13114 int capa;
13115 int len;
13116 const struct rb_callable_method_entry_struct *cme;
13117 struct rb_class_cc_entries_entry {
13118 const struct rb_callinfo *ci;
13119 const struct rb_callcache *cc;
13120 } *entries;
13121};
13122void rb_vm_ccs_free(struct rb_class_cc_entries *ccs);
13123
13124
13125struct RNode;
13126VALUE ruby_debug_print_value(int level, int debug_level, const char *header, VALUE v);
13127ID ruby_debug_print_id(int level, int debug_level, const char *header, ID id);
13128struct RNode *ruby_debug_print_node(int level, int debug_level, const char *header, const struct RNode *node);
13129int ruby_debug_print_indent(int level, int debug_level, int indent_level);
13130void ruby_debug_gc_check_func(void);
13131void ruby_set_debug_option(const char *str);
13132
13133
13134extern enum ruby_debug_log_mode {
13135 ruby_debug_log_disabled = 0x00,
13136 ruby_debug_log_memory = 0x01,
13137 ruby_debug_log_stderr = 0x02,
13138 ruby_debug_log_file = 0x04,
13139} ruby_debug_log_mode;
13140__attribute__((__format__(__printf__, 4, 5)))
13141void ruby_debug_log(const char *file, int line, const char *func_name, const char *fmt, ...);
13142void ruby_debug_log_print(unsigned int n);
13143_Bool ruby_debug_log_filter(const char *func_name);
13144typedef long OFFSET;
13145typedef unsigned long lindex_t;
13146typedef VALUE GENTRY;
13147typedef rb_iseq_t *ISEQ;
13148
13149
13150extern VALUE ruby_vm_const_missing_count;
13151extern rb_serial_t ruby_vm_global_constant_state;
13152extern rb_serial_t ruby_vm_class_serial;
13153extern rb_serial_t ruby_vm_global_cvar_state;
13154
13155
13156static inline void
13157CC_SET_FASTPATH(const struct rb_callcache *cc, vm_call_handler func, _Bool enabled)
13158{
13159 if ((__builtin_expect(!!(enabled), 1))) {
13160 vm_cc_call_set(cc, func);
13161 }
13162}
13163static inline struct vm_throw_data *
13164THROW_DATA_NEW(VALUE val, const rb_control_frame_t *cf, int st)
13165{
13166 struct vm_throw_data *obj = (struct vm_throw_data *)rb_imemo_new(imemo_throw_data, val, (VALUE)cf, 0, 0);
13167 obj->throw_state = st;
13168 return obj;
13169}
13170static inline VALUE
13171THROW_DATA_VAL(const struct vm_throw_data *obj)
13172{
13173 ((void)0);
13174 return obj->throw_obj;
13175}
13176static inline const rb_control_frame_t *
13177THROW_DATA_CATCH_FRAME(const struct vm_throw_data *obj)
13178{
13179 ((void)0);
13180 return obj->catch_frame;
13181}
13182static inline int
13183THROW_DATA_STATE(const struct vm_throw_data *obj)
13184{
13185 ((void)0);
13186 return obj->throw_state;
13187}
13188static inline int
13189THROW_DATA_CONSUMED_P(const struct vm_throw_data *obj)
13190{
13191 ((void)0);
13192 return obj->flags & ((VALUE)RUBY_FL_USER4);
13193}
13194static inline void
13195THROW_DATA_CATCH_FRAME_SET(struct vm_throw_data *obj, const rb_control_frame_t *cfp)
13196{
13197 ((void)0);
13198 obj->catch_frame = cfp;
13199}
13200static inline void
13201THROW_DATA_STATE_SET(struct vm_throw_data *obj, int st)
13202{
13203 ((void)0);
13204 obj->throw_state = st;
13205}
13206static inline void
13207THROW_DATA_CONSUMED_SET(struct vm_throw_data *obj)
13208{
13209 if (imemo_throw_data_p((VALUE)obj) &&
13210 THROW_DATA_STATE(obj) == RUBY_TAG_BREAK) {
13211 obj->flags |= ((VALUE)RUBY_FL_USER4);
13212 }
13213}
13214static inline _Bool
13215vm_call_iseq_optimizable_p(const struct rb_callinfo *ci, const struct rb_callcache *cc)
13216{
13217 return !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
13218 !((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) == METHOD_VISI_PROTECTED);
13219}
13220struct rb_ractor_local_storage_type {
13221 void (*mark)(void *ptr);
13222 void (*free)(void *ptr);
13223};
13224typedef struct rb_ractor_local_key_struct *rb_ractor_local_key_t;
13225
13226
13227extern VALUE rb_cRactor;
13228VALUE rb_ractor_stdin(void);
13229VALUE rb_ractor_stdout(void);
13230VALUE rb_ractor_stderr(void);
13231void rb_ractor_stdin_set(VALUE io);
13232void rb_ractor_stdout_set(VALUE io);
13233void rb_ractor_stderr_set(VALUE io);
13234rb_ractor_local_key_t rb_ractor_local_storage_value_newkey(void);
13235VALUE rb_ractor_local_storage_value(rb_ractor_local_key_t key);
13236_Bool rb_ractor_local_storage_value_lookup(rb_ractor_local_key_t key, VALUE *val);
13237void rb_ractor_local_storage_value_set(rb_ractor_local_key_t key, VALUE val);
13238extern const struct rb_ractor_local_storage_type rb_ractor_local_storage_type_free;
13239rb_ractor_local_key_t rb_ractor_local_storage_ptr_newkey(const struct rb_ractor_local_storage_type *type);
13240void *rb_ractor_local_storage_ptr(rb_ractor_local_key_t key);
13241void rb_ractor_local_storage_ptr_set(rb_ractor_local_key_t key, void *ptr);
13242VALUE rb_ractor_make_shareable(VALUE obj);
13243VALUE rb_ractor_make_shareable_copy(VALUE obj);
13244
13245
13246static inline _Bool
13247rb_ractor_shareable_p(VALUE obj)
13248{
13249 _Bool rb_ractor_shareable_p_continue(VALUE obj);
13250 if (RB_SPECIAL_CONST_P(obj)) {
13251 return 1;
13252 }
13253 else if (RB_FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)) {
13254 return 1;
13255 }
13256 else {
13257 return rb_ractor_shareable_p_continue(obj);
13258 }
13259}
13260enum rb_ractor_basket_type {
13261 basket_type_none,
13262 basket_type_ref,
13263 basket_type_copy,
13264 basket_type_move,
13265 basket_type_will,
13266 basket_type_deleted,
13267 basket_type_reserved,
13268};
13269struct rb_ractor_basket {
13270 _Bool exception;
13271 enum rb_ractor_basket_type type;
13272 VALUE v;
13273 VALUE sender;
13274};
13275struct rb_ractor_queue {
13276 struct rb_ractor_basket *baskets;
13277 int start;
13278 int cnt;
13279 int size;
13280 unsigned int serial;
13281 unsigned int reserved_cnt;
13282};
13283struct rb_ractor_waiting_list {
13284 int cnt;
13285 int size;
13286 rb_ractor_t **ractors;
13287};
13288struct rb_ractor_sync {
13289 rb_nativethread_lock_t lock;
13290 rb_nativethread_cond_t cond;
13291 struct rb_ractor_queue incoming_queue;
13292 struct rb_ractor_waiting_list taking_ractors;
13293 _Bool incoming_port_closed;
13294 _Bool outgoing_port_closed;
13295 struct ractor_wait {
13296 enum ractor_wait_status {
13297 wait_none = 0x00,
13298 wait_receiving = 0x01,
13299 wait_taking = 0x02,
13300 wait_yielding = 0x04,
13301 wait_moving = 0x08,
13302 } status;
13303 enum ractor_wakeup_status {
13304 wakeup_none,
13305 wakeup_by_send,
13306 wakeup_by_yield,
13307 wakeup_by_take,
13308 wakeup_by_close,
13309 wakeup_by_interrupt,
13310 wakeup_by_retry,
13311 } wakeup_status;
13312 struct rb_ractor_basket yielded_basket;
13313 struct rb_ractor_basket taken_basket;
13314 } wait;
13315};
13316struct rb_ractor_struct {
13317 struct rb_ractor_pub pub;
13318 struct rb_ractor_sync sync;
13319 VALUE receiving_mutex;
13320 _Bool yield_atexit;
13321 rb_nativethread_cond_t barrier_wait_cond;
13322 struct {
13323 struct list_head set;
13324 unsigned int cnt;
13325 unsigned int blocking_cnt;
13326 unsigned int sleeper;
13327 rb_global_vm_lock_t gvl;
13328 rb_execution_context_t *running_ec;
13329 rb_thread_t *main;
13330 } threads;
13331 VALUE thgroup_default;
13332 VALUE name;
13333 VALUE loc;
13334 enum ractor_status {
13335 ractor_created,
13336 ractor_running,
13337 ractor_blocking,
13338 ractor_terminated,
13339 } status_;
13340 struct list_node vmlr_node;
13341 st_table *local_storage;
13342 struct rb_id_table *idkey_local_storage;
13343 VALUE r_stdin;
13344 VALUE r_stdout;
13345 VALUE r_stderr;
13346 VALUE verbose;
13347 VALUE debug;
13348 rb_ractor_newobj_cache_t newobj_cache;
13349 struct gc_mark_func_data_struct {
13350 void *data;
13351 void (*mark_func)(VALUE v, void *data);
13352 } *mfd;
13353};
13354static inline VALUE
13355rb_ractor_self(const rb_ractor_t *r)
13356{
13357 return r->pub.self;
13358}
13359rb_ractor_t *rb_ractor_main_alloc(void);
13360void rb_ractor_main_setup(rb_vm_t *vm, rb_ractor_t *main_ractor, rb_thread_t *main_thread);
13361void rb_ractor_atexit(rb_execution_context_t *ec, VALUE result);
13362void rb_ractor_atexit_exception(rb_execution_context_t *ec);
13363void rb_ractor_teardown(rb_execution_context_t *ec);
13364void rb_ractor_receive_parameters(rb_execution_context_t *ec, rb_ractor_t *g, int len, VALUE *ptr);
13365void rb_ractor_send_parameters(rb_execution_context_t *ec, rb_ractor_t *g, VALUE args);
13366VALUE rb_thread_create_ractor(rb_ractor_t *g, VALUE args, VALUE proc);
13367rb_global_vm_lock_t *rb_ractor_gvl(rb_ractor_t *);
13368int rb_ractor_living_thread_num(const rb_ractor_t *);
13369VALUE rb_ractor_thread_list(rb_ractor_t *r);
13370_Bool rb_ractor_p(VALUE rv);
13371void rb_ractor_living_threads_init(rb_ractor_t *r);
13372void rb_ractor_living_threads_insert(rb_ractor_t *r, rb_thread_t *th);
13373void rb_ractor_living_threads_remove(rb_ractor_t *r, rb_thread_t *th);
13374void rb_ractor_blocking_threads_inc(rb_ractor_t *r, const char *file, int line);
13375void rb_ractor_blocking_threads_dec(rb_ractor_t *r, const char *file, int line);
13376void rb_ractor_vm_barrier_interrupt_running_thread(rb_ractor_t *r);
13377void rb_ractor_terminate_interrupt_main_thread(rb_ractor_t *r);
13378void rb_ractor_terminate_all(void);
13379_Bool rb_ractor_main_p_(void);
13380void rb_ractor_finish_marking(void);
13381void rb_ractor_atfork(rb_vm_t *vm, rb_thread_t *th);
13382VALUE rb_ractor_ensure_shareable(VALUE obj, VALUE name);
13383
13384
13385_Bool rb_ractor_shareable_p_continue(VALUE obj);
13386void rb_ractor_local_storage_delkey(rb_ractor_local_key_t key);
13387
13388
13389static inline _Bool
13390rb_ractor_main_p(void)
13391{
13392 if (ruby_single_main_ractor) {
13393 return 1;
13394 }
13395 else {
13396 return rb_ractor_main_p_();
13397 }
13398}
13399static inline _Bool
13400rb_ractor_status_p(rb_ractor_t *r, enum ractor_status status)
13401{
13402 return r->status_ == status;
13403}
13404static inline void
13405rb_ractor_sleeper_threads_inc(rb_ractor_t *r)
13406{
13407 r->threads.sleeper++;
13408}
13409static inline void
13410rb_ractor_sleeper_threads_dec(rb_ractor_t *r)
13411{
13412 r->threads.sleeper--;
13413}
13414static inline void
13415rb_ractor_sleeper_threads_clear(rb_ractor_t *r)
13416{
13417 r->threads.sleeper = 0;
13418}
13419static inline int
13420rb_ractor_sleeper_thread_num(rb_ractor_t *r)
13421{
13422 return r->threads.sleeper;
13423}
13424static inline void
13425rb_ractor_thread_switch(rb_ractor_t *cr, rb_thread_t *th)
13426{
13427 if (cr->threads.running_ec != th->ec) {
13428 if (0) {
13429 ruby_debug_printf("rb_ractor_thread_switch ec:%p->%p\n",
13430 (void *)cr->threads.running_ec, (void *)th->ec);
13431 }
13432 }
13433 else {
13434 return;
13435 }
13436 if (cr->threads.running_ec != th->ec) {
13437 th->running_time_us = 0;
13438 }
13439 cr->threads.running_ec = th->ec;
13440 ((void)0);
13441}
13442static inline void
13443rb_ractor_set_current_ec(rb_ractor_t *cr, rb_execution_context_t *ec)
13444{
13445 ruby_current_ec = ec;
13446 if (cr->threads.running_ec != ec) {
13447 if (0) {
13448 ruby_debug_printf("rb_ractor_set_current_ec ec:%p->%p\n",
13449 (void *)cr->threads.running_ec, (void *)ec);
13450 }
13451 }
13452 else {
13453 ((void)0);
13454 }
13455 cr->threads.running_ec = ec;
13456}
13457void rb_vm_ractor_blocking_cnt_inc(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
13458void rb_vm_ractor_blocking_cnt_dec(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
13459static inline uint32_t
13460rb_ractor_id(const rb_ractor_t *r)
13461{
13462 return r->pub.id;
13463}
13464_Bool rb_vm_locked_p(void);
13465void rb_vm_lock_body(void);
13466void rb_vm_unlock_body(void);
13467struct rb_ractor_struct;
13468void rb_vm_lock_enter_body_cr(struct rb_ractor_struct *cr, unsigned int *lev );
13469void rb_vm_lock_enter_body_nb(unsigned int *lev );
13470void rb_vm_lock_enter_body(unsigned int *lev );
13471void rb_vm_lock_leave_body(unsigned int *lev );
13472void rb_vm_barrier(void);
13473extern struct rb_ractor_struct *ruby_single_main_ractor;
13474static inline _Bool
13475rb_multi_ractor_p(void)
13476{
13477 if ((__builtin_expect(!!(ruby_single_main_ractor), 1))) {
13478 ((void)0);
13479 return 0;
13480 }
13481 else {
13482 return 1;
13483 }
13484}
13485static inline void
13486rb_vm_lock(const char *file, int line)
13487{
13488 ((void)0);
13489 if (rb_multi_ractor_p()) {
13490 rb_vm_lock_body();
13491 }
13492}
13493static inline void
13494rb_vm_unlock(const char *file, int line)
13495{
13496 if (rb_multi_ractor_p()) {
13497 rb_vm_unlock_body();
13498 }
13499}
13500static inline void
13501rb_vm_lock_enter(unsigned int *lev, const char *file, int line)
13502{
13503 ((void)0);
13504 if (rb_multi_ractor_p()) {
13505 rb_vm_lock_enter_body(lev );
13506 }
13507}
13508static inline void
13509rb_vm_lock_enter_nb(unsigned int *lev, const char *file, int line)
13510{
13511 ((void)0);
13512 if (rb_multi_ractor_p()) {
13513 rb_vm_lock_enter_body_nb(lev );
13514 }
13515}
13516static inline void
13517rb_vm_lock_leave(unsigned int *lev, const char *file, int line)
13518{
13519 if (rb_multi_ractor_p()) {
13520 rb_vm_lock_leave_body(lev );
13521 }
13522}
13523static inline void
13524rb_vm_lock_enter_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
13525{
13526 ((void)0);
13527 rb_vm_lock_enter_body_cr(cr, levp );
13528}
13529static inline void
13530rb_vm_lock_leave_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
13531{
13532 rb_vm_lock_leave_body(levp );
13533}
13534struct rb_builtin_function {
13535 const void * const func_ptr;
13536 const int argc;
13537 const int index;
13538 const char * const name;
13539 void (*compiler)(FILE *, long, unsigned, _Bool);
13540};
13541void rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table);
13542static inline void rb_builtin_function_check_arity0(VALUE (*f)(rb_execution_context_t *ec, VALUE self)){}
13543static inline void rb_builtin_function_check_arity1(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE)){}
13544static inline void rb_builtin_function_check_arity2(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE)){}
13545static inline void rb_builtin_function_check_arity3(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE)){}
13546static inline void rb_builtin_function_check_arity4(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE)){}
13547static inline void rb_builtin_function_check_arity5(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE)){}
13548static inline void rb_builtin_function_check_arity6(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
13549static inline void rb_builtin_function_check_arity7(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
13550static inline void rb_builtin_function_check_arity8(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
13551static inline void rb_builtin_function_check_arity9(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
13552static inline void rb_builtin_function_check_arity10(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
13553static inline void rb_builtin_function_check_arity11(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
13554static inline void rb_builtin_function_check_arity12(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
13555static inline void rb_builtin_function_check_arity13(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
13556static inline void rb_builtin_function_check_arity14(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
13557static inline void rb_builtin_function_check_arity15(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}static inline
13558__attribute__((__pure__)) VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);static inline
13559VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);
13560__attribute__((__pure__)) static inline VALUE rb_vm_lvar(rb_execution_context_t *ec, int index);
13561static inline VALUE
13562rb_vm_lvar(rb_execution_context_t *ec, int index)
13563{
13564 return ec->cfp->ep[index];
13565}
13566struct builtin_binary {
13567 const char *feature;
13568 const unsigned char *bin;
13569 size_t bin_size;
13570};
13571struct ruby_dtrace_method_hook_args {
13572 const char *classname;
13573 const char *methodname;
13574 const char *filename;
13575 int line_no;
13576 volatile VALUE klass;
13577 volatile VALUE name;
13578};
13579
13580
13581__attribute__((__noinline__)) int rb_dtrace_setup(rb_execution_context_t *, VALUE, ID, struct ruby_dtrace_method_hook_args *);
13582
13583
13584VALUE rb_str_concat_literals(size_t, const VALUE*);
13585__attribute__ ((__visibility__("default"))) extern
13586VALUE rb_vm_exec(rb_execution_context_t *, _Bool);
13587__attribute__((__pure__)) static inline const VALUE *VM_EP_LEP(const VALUE *);
13588static inline const VALUE *
13589VM_EP_LEP(const VALUE *ep)
13590{
13591 while (!VM_ENV_LOCAL_P(ep)) {
13592 ep = VM_ENV_PREV_EP(ep);
13593 }
13594 return ep;
13595}
13596static inline const rb_control_frame_t *
13597rb_vm_search_cf_from_ep(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE * const ep)
13598{
13599 if (!ep) {
13600 return ((void *)0);
13601 }
13602 else {
13603 const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec);
13604 while (cfp < eocfp) {
13605 if (cfp->ep == ep) {
13606 return cfp;
13607 }
13608 cfp = ((cfp)+1);
13609 }
13610 return ((void *)0);
13611 }
13612}static inline
13613const VALUE *
13614rb_vm_ep_local_ep(const VALUE *ep)
13615{
13616 return VM_EP_LEP(ep);
13617}
13618__attribute__((__pure__)) static inline const VALUE *VM_CF_LEP(const rb_control_frame_t * const cfp);
13619static inline const VALUE *
13620VM_CF_LEP(const rb_control_frame_t * const cfp)
13621{
13622 return VM_EP_LEP(cfp->ep);
13623}
13624static inline const VALUE *
13625VM_CF_PREV_EP(const rb_control_frame_t * const cfp)
13626{
13627 return VM_ENV_PREV_EP(cfp->ep);
13628}
13629__attribute__((__pure__)) static inline VALUE VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp);
13630static inline VALUE
13631VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp)
13632{
13633 const VALUE *ep = VM_CF_LEP(cfp);
13634 return VM_ENV_BLOCK_HANDLER(ep);
13635}static inline
13636int
13637rb_vm_cframe_keyword_p(const rb_control_frame_t *cfp)
13638{
13639 return VM_FRAME_CFRAME_KW_P(cfp);
13640}static inline
13641VALUE
13642rb_vm_frame_block_handler(const rb_control_frame_t *cfp)
13643{
13644 return VM_CF_BLOCK_HANDLER(cfp);
13645}
13646static struct rb_captured_block *
13647VM_CFP_TO_CAPTURED_BLOCK(const rb_control_frame_t *cfp)
13648{
13649 ((void)0);
13650 return (struct rb_captured_block *)&cfp->self;
13651}
13652static rb_control_frame_t *
13653VM_CAPTURED_BLOCK_TO_CFP(const struct rb_captured_block *captured)
13654{
13655 rb_control_frame_t *cfp = ((rb_control_frame_t *)((VALUE *)(captured) - 3));
13656 ((void)0);
13657 ((void)0);
13658 return cfp;
13659}
13660static int
13661VM_BH_FROM_CFP_P(VALUE block_handler, const rb_control_frame_t *cfp)
13662{
13663 const struct rb_captured_block *captured = VM_CFP_TO_CAPTURED_BLOCK(cfp);
13664 return ((void *)((block_handler) & ~0x03)) == captured;
13665}
13666static VALUE
13667vm_passed_block_handler(rb_execution_context_t *ec)
13668{
13669 VALUE block_handler = ec->passed_block_handler;
13670 ec->passed_block_handler = 0;
13671 vm_block_handler_verify(block_handler);
13672 return block_handler;
13673}
13674static rb_cref_t *
13675vm_cref_new0(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval, int use_prev_prev, int singleton)
13676{
13677 VALUE refinements = ((VALUE)RUBY_Qnil);
13678 int omod_shared = 0;
13679 rb_cref_t *cref;
13680 union {
13681 rb_scope_visibility_t visi;
13682 VALUE value;
13683 } scope_visi;
13684 scope_visi.visi.method_visi = visi;
13685 scope_visi.visi.module_func = module_func;
13686 if (prev_cref != ((void *)0) && prev_cref != (void *)1 ) {
13687 refinements = CREF_REFINEMENTS(prev_cref);
13688 if (!RB_NIL_P(refinements)) {
13689 omod_shared = 1;
13690 CREF_OMOD_SHARED_SET(prev_cref);
13691 }
13692 }
13693 ((void)0);
13694 cref = (rb_cref_t *)rb_imemo_new(imemo_cref, klass, (VALUE)(use_prev_prev ? CREF_NEXT(prev_cref) : prev_cref), scope_visi.value, refinements);
13695 if (pushed_by_eval) CREF_PUSHED_BY_EVAL_SET(cref);
13696 if (omod_shared) CREF_OMOD_SHARED_SET(cref);
13697 if (singleton) CREF_SINGLETON_SET(cref);
13698 return cref;
13699}
13700static rb_cref_t *
13701vm_cref_new(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval, int singleton)
13702{
13703 return vm_cref_new0(klass, visi, module_func, prev_cref, pushed_by_eval, 0, singleton);
13704}
13705static rb_cref_t *
13706vm_cref_new_use_prev(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval)
13707{
13708 return vm_cref_new0(klass, visi, module_func, prev_cref, pushed_by_eval, 1, 0);
13709}
13710static int
13711ref_delete_symkey(VALUE key, VALUE value, VALUE unused)
13712{
13713 return RB_SYMBOL_P(key) ? ST_DELETE : ST_CONTINUE;
13714}
13715static rb_cref_t *
13716vm_cref_dup(const rb_cref_t *cref)
13717{
13718 const rb_scope_visibility_t *visi = CREF_SCOPE_VISI(cref);
13719 rb_cref_t *next_cref = CREF_NEXT(cref), *new_cref;
13720 int pushed_by_eval = CREF_PUSHED_BY_EVAL(cref);
13721 int singleton = CREF_SINGLETON(cref);
13722 new_cref = vm_cref_new(cref->klass_or_self, visi->method_visi, visi->module_func, next_cref, pushed_by_eval, singleton);
13723 if (!RB_NIL_P(CREF_REFINEMENTS(cref))) {
13724 VALUE ref = rb_hash_dup(CREF_REFINEMENTS(cref));
13725 rb_hash_foreach(ref, ref_delete_symkey, ((VALUE)RUBY_Qnil));
13726 CREF_REFINEMENTS_SET(new_cref, ref);
13727 CREF_OMOD_SHARED_UNSET(new_cref);
13728 }
13729 return new_cref;
13730}static inline
13731rb_cref_t *
13732rb_vm_cref_dup_without_refinements(const rb_cref_t *cref)
13733{
13734 const rb_scope_visibility_t *visi = CREF_SCOPE_VISI(cref);
13735 rb_cref_t *next_cref = CREF_NEXT(cref), *new_cref;
13736 int pushed_by_eval = CREF_PUSHED_BY_EVAL(cref);
13737 int singleton = CREF_SINGLETON(cref);
13738 new_cref = vm_cref_new(cref->klass_or_self, visi->method_visi, visi->module_func, next_cref, pushed_by_eval, singleton);
13739 if (!RB_NIL_P(CREF_REFINEMENTS(cref))) {
13740 CREF_REFINEMENTS_SET(new_cref, ((VALUE)RUBY_Qnil));
13741 CREF_OMOD_SHARED_UNSET(new_cref);
13742 }
13743 return new_cref;
13744}
13745static rb_cref_t *
13746vm_cref_new_toplevel(rb_execution_context_t *ec)
13747{
13748 rb_cref_t *cref = vm_cref_new(rb_cObject, METHOD_VISI_PRIVATE , 0, ((void *)0), 0, 0);
13749 VALUE top_wrapper = rb_ec_thread_ptr(ec)->top_wrapper;
13750 if (top_wrapper) {
13751 cref = vm_cref_new(top_wrapper, METHOD_VISI_PRIVATE, 0, cref, 0, 0);
13752 }
13753 return cref;
13754}static inline
13755rb_cref_t *
13756rb_vm_cref_new_toplevel(void)
13757{
13758 return vm_cref_new_toplevel(rb_current_execution_context(1));
13759}
13760static void
13761vm_cref_dump(const char *mesg, const rb_cref_t *cref)
13762{
13763 ruby_debug_printf("vm_cref_dump: %s (%p)\n", mesg, (void *)cref);
13764 while (cref) {
13765 ruby_debug_printf("= cref| klass: %s\n", RSTRING_PTR(rb_class_path(CREF_CLASS(cref))));
13766 cref = CREF_NEXT(cref);
13767 }
13768}static inline
13769void
13770rb_vm_block_ep_update(VALUE obj, const struct rb_block *dst, const VALUE *ep)
13771{
13772 *((const VALUE **)&dst->as.captured.ep) = ep;
13773 (rb_obj_written((VALUE)(obj), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(VM_ENV_ENVVAL(ep)), "./vm.c", 353));
13774}
13775static void
13776vm_bind_update_env(VALUE bindval, rb_binding_t *bind, VALUE envval)
13777{
13778 const rb_env_t *env = (rb_env_t *)envval;
13779 rb_obj_write((VALUE)(bindval), __extension__({
13780 ;
13781 ; __typeof__((VALUE *)(&bind->block.as.captured.code.iseq)) unaligned_member_access_result = ((VALUE *)(&bind->block.as.captured.code.iseq));
13782 ; unaligned_member_access_result; }), (VALUE)(env->iseq), "./vm.c", 360);
13783 rb_vm_block_ep_update(bindval, &bind->block, env->ep);
13784}
13785static VALUE vm_make_env_object(const rb_execution_context_t *ec, rb_control_frame_t *cfp);
13786extern VALUE rb_vm_invoke_bmethod(rb_execution_context_t *ec, rb_proc_t *proc, VALUE self,
13787 int argc, const VALUE *argv, int kw_splat, VALUE block_handler,
13788 const rb_callable_method_entry_t *me);
13789static VALUE vm_invoke_proc(rb_execution_context_t *ec, rb_proc_t *proc, VALUE self, int argc, const VALUE *argv, int kw_splat, VALUE block_handler);
13790typedef enum {
13791 CONST_DEPRECATED = 0x100,
13792 CONST_VISIBILITY_MASK = 0xff,
13793 CONST_PUBLIC = 0x00,
13794 CONST_PRIVATE,
13795 CONST_VISIBILITY_MAX
13796} rb_const_flag_t;
13797typedef struct rb_const_entry_struct {
13798 rb_const_flag_t flag;
13799 int line;
13800 VALUE value;
13801 VALUE file;
13802} rb_const_entry_t;
13803VALUE rb_mod_private_constant(int argc, const VALUE *argv, VALUE obj);
13804VALUE rb_mod_public_constant(int argc, const VALUE *argv, VALUE obj);
13805VALUE rb_mod_deprecate_constant(int argc, const VALUE *argv, VALUE obj);
13806void rb_free_const_table(struct rb_id_table *tbl);
13807VALUE rb_const_source_location(VALUE, ID);
13808
13809
13810int rb_autoloading_value(VALUE mod, ID id, VALUE *value, rb_const_flag_t *flag);
13811rb_const_entry_t *rb_const_lookup(VALUE klass, ID id);
13812VALUE rb_public_const_get_at(VALUE klass, ID id);
13813VALUE rb_public_const_get_from(VALUE klass, ID id);
13814int rb_public_const_defined_from(VALUE klass, ID id);
13815VALUE rb_const_source_location_at(VALUE, ID);
13816
13817
13818enum {
13819 cmp_opt_Integer,
13820 cmp_opt_String,
13821 cmp_opt_Float,
13822 cmp_optimizable_count
13823};
13824struct cmp_opt_data {
13825 unsigned int opt_methods;
13826 unsigned int opt_inited;
13827};
13828VALUE rb_invcmp(VALUE, VALUE);
13829struct ar_table_struct;
13830typedef unsigned char ar_hint_t;
13831enum ruby_rhash_flags {
13832 RHASH_PASS_AS_KEYWORDS = ((VALUE)RUBY_FL_USER1),
13833 RHASH_PROC_DEFAULT = ((VALUE)RUBY_FL_USER2),
13834 RHASH_ST_TABLE_FLAG = ((VALUE)RUBY_FL_USER3),
13835 RHASH_AR_TABLE_SIZE_MASK = (((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6)|((VALUE)RUBY_FL_USER7)),
13836 RHASH_AR_TABLE_SIZE_SHIFT = (((VALUE)RUBY_FL_USHIFT)+4),
13837 RHASH_AR_TABLE_BOUND_MASK = (((VALUE)RUBY_FL_USER8)|((VALUE)RUBY_FL_USER9)|((VALUE)RUBY_FL_USER10)|((VALUE)RUBY_FL_USER11)),
13838 RHASH_AR_TABLE_BOUND_SHIFT = (((VALUE)RUBY_FL_USHIFT)+8),
13839 RHASH_TRANSIENT_FLAG = ((VALUE)RUBY_FL_USER12),
13840 RHASH_LEV_SHIFT = (((VALUE)RUBY_FL_USHIFT) + 13),
13841 RHASH_LEV_MAX = 127,
13842};
13843struct RHash {
13844 struct RBasic basic;
13845 union {
13846 st_table *st;
13847 struct ar_table_struct *ar;
13848 } as;
13849 const VALUE ifnone;
13850 union {
13851 ar_hint_t ary[8];
13852 VALUE word;
13853 } ar_hint;
13854};
13855void rb_hash_st_table_set(VALUE hash, st_table *st);
13856VALUE rb_hash_default_value(VALUE hash, VALUE key);
13857VALUE rb_hash_set_default_proc(VALUE hash, VALUE proc);
13858long rb_dbl_long_hash(double d);
13859st_table *rb_init_identtable(void);
13860VALUE rb_to_hash_type(VALUE obj);
13861VALUE rb_hash_key_str(VALUE);
13862VALUE rb_hash_values(VALUE hash);
13863VALUE rb_hash_rehash(VALUE hash);
13864int rb_hash_add_new_element(VALUE hash, VALUE key, VALUE val);
13865VALUE rb_hash_set_pair(VALUE hash, VALUE pair);
13866int rb_hash_stlike_delete(VALUE hash, st_data_t *pkey, st_data_t *pval);
13867int rb_hash_stlike_foreach_with_replace(VALUE hash, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
13868int rb_hash_stlike_update(VALUE hash, st_data_t key, st_update_callback_func *func, st_data_t arg);
13869extern st_table *rb_hash_st_table(VALUE hash);
13870VALUE rb_ident_hash_new_with_size(st_index_t size);
13871static inline unsigned RHASH_AR_TABLE_SIZE_RAW(VALUE h);
13872static inline VALUE RHASH_IFNONE(VALUE h);
13873static inline size_t RHASH_SIZE(VALUE h);
13874static inline _Bool RHASH_EMPTY_P(VALUE h);
13875static inline _Bool RHASH_AR_TABLE_P(VALUE h);
13876static inline _Bool RHASH_ST_TABLE_P(VALUE h);
13877static inline struct ar_table_struct *RHASH_AR_TABLE(VALUE h);
13878static inline st_table *RHASH_ST_TABLE(VALUE h);
13879static inline size_t RHASH_ST_SIZE(VALUE h);
13880static inline void RHASH_ST_CLEAR(VALUE h);
13881static inline _Bool RHASH_TRANSIENT_P(VALUE h);
13882static inline void RHASH_SET_TRANSIENT_FLAG(VALUE h);
13883static inline void RHASH_UNSET_TRANSIENT_FLAG(VALUE h);
13884
13885
13886VALUE rb_hash_delete_entry(VALUE hash, VALUE key);
13887VALUE rb_ident_hash_new(void);
13888int rb_hash_stlike_foreach(VALUE hash, st_foreach_callback_func *func, st_data_t arg);
13889
13890
13891
13892
13893VALUE rb_hash_new_with_size(st_index_t size);
13894VALUE rb_hash_resurrect(VALUE hash);
13895int rb_hash_stlike_lookup(VALUE hash, st_data_t key, st_data_t *pval);
13896VALUE rb_hash_keys(VALUE hash);
13897VALUE rb_hash_has_key(VALUE hash, VALUE key);
13898VALUE rb_hash_compare_by_id_p(VALUE hash);
13899st_table *rb_hash_tbl_raw(VALUE hash, const char *file, int line);
13900
13901
13902VALUE rb_hash_compare_by_id(VALUE hash);
13903static inline _Bool
13904RHASH_AR_TABLE_P(VALUE h)
13905{
13906 return ! RB_FL_TEST_RAW(h, RHASH_ST_TABLE_FLAG);
13907}
13908static inline struct ar_table_struct *
13909RHASH_AR_TABLE(VALUE h)
13910{
13911 return ((struct RHash *)(h))->as.ar;
13912}
13913static inline st_table *
13914RHASH_ST_TABLE(VALUE h)
13915{
13916 return ((struct RHash *)(h))->as.st;
13917}
13918static inline VALUE
13919RHASH_IFNONE(VALUE h)
13920{
13921 return ((struct RHash *)(h))->ifnone;
13922}
13923static inline size_t
13924RHASH_SIZE(VALUE h)
13925{
13926 if (RHASH_AR_TABLE_P(h)) {
13927 return RHASH_AR_TABLE_SIZE_RAW(h);
13928 }
13929 else {
13930 return RHASH_ST_SIZE(h);
13931 }
13932}
13933static inline _Bool
13934RHASH_EMPTY_P(VALUE h)
13935{
13936 return RHASH_SIZE(h) == 0;
13937}
13938static inline _Bool
13939RHASH_ST_TABLE_P(VALUE h)
13940{
13941 return ! RHASH_AR_TABLE_P(h);
13942}
13943static inline size_t
13944RHASH_ST_SIZE(VALUE h)
13945{
13946 return RHASH_ST_TABLE(h)->num_entries;
13947}
13948static inline void
13949RHASH_ST_CLEAR(VALUE h)
13950{
13951 RB_FL_UNSET_RAW(h, RHASH_ST_TABLE_FLAG);
13952 ((struct RHash *)(h))->as.ar = ((void *)0);
13953}
13954static inline unsigned
13955RHASH_AR_TABLE_SIZE_RAW(VALUE h)
13956{
13957 VALUE ret = RB_FL_TEST_RAW(h, RHASH_AR_TABLE_SIZE_MASK);
13958 ret >>= RHASH_AR_TABLE_SIZE_SHIFT;
13959 return (unsigned)ret;
13960}
13961static inline _Bool
13962RHASH_TRANSIENT_P(VALUE h)
13963{
13964 return RB_FL_TEST_RAW(h, RHASH_TRANSIENT_FLAG);
13965}
13966static inline void
13967RHASH_SET_TRANSIENT_FLAG(VALUE h)
13968{
13969 RB_FL_SET_RAW(h, RHASH_TRANSIENT_FLAG);
13970}
13971static inline void
13972RHASH_UNSET_TRANSIENT_FLAG(VALUE h)
13973{
13974 RB_FL_UNSET_RAW(h, RHASH_TRANSIENT_FLAG);
13975}
13976enum rb_int_parse_flags {
13977 RB_INT_PARSE_SIGN = 0x01,
13978 RB_INT_PARSE_UNDERSCORE = 0x02,
13979 RB_INT_PARSE_PREFIX = 0x04,
13980 RB_INT_PARSE_ALL = 0x07,
13981 RB_INT_PARSE_DEFAULT = 0x07,
13982};
13983struct RBignum {
13984 struct RBasic basic;
13985 union {
13986 struct {
13987 size_t len;
13988 unsigned int *digits;
13989 } heap;
13990 unsigned int ary[(8*3/4)];
13991 } as;
13992};
13993extern const char ruby_digitmap[];
13994double rb_big_fdiv_double(VALUE x, VALUE y);
13995VALUE rb_big_uminus(VALUE x);
13996VALUE rb_big_hash(VALUE);
13997VALUE rb_big_odd_p(VALUE);
13998VALUE rb_big_even_p(VALUE);
13999size_t rb_big_size(VALUE);
14000VALUE rb_integer_float_cmp(VALUE x, VALUE y);
14001VALUE rb_integer_float_eq(VALUE x, VALUE y);
14002VALUE rb_str_convert_to_inum(VALUE str, int base, int badcheck, int raise_exception);
14003VALUE rb_big_comp(VALUE x);
14004VALUE rb_big_aref(VALUE x, VALUE y);
14005VALUE rb_big_abs(VALUE x);
14006VALUE rb_big_size_m(VALUE big);
14007VALUE rb_big_bit_length(VALUE big);
14008VALUE rb_big_remainder(VALUE x, VALUE y);
14009VALUE rb_big_gt(VALUE x, VALUE y);
14010VALUE rb_big_ge(VALUE x, VALUE y);
14011VALUE rb_big_lt(VALUE x, VALUE y);
14012VALUE rb_big_le(VALUE x, VALUE y);
14013VALUE rb_int_powm(int const argc, VALUE * const argv, VALUE const num);
14014VALUE rb_big_isqrt(VALUE n);
14015static inline _Bool BIGNUM_SIGN(VALUE b);
14016static inline _Bool BIGNUM_POSITIVE_P(VALUE b);
14017static inline _Bool BIGNUM_NEGATIVE_P(VALUE b);
14018static inline void BIGNUM_SET_SIGN(VALUE b, _Bool sign);
14019static inline void BIGNUM_NEGATE(VALUE b);
14020static inline size_t BIGNUM_LEN(VALUE b);
14021static inline unsigned int *BIGNUM_DIGITS(VALUE b);
14022static inline int BIGNUM_LENINT(VALUE b);
14023static inline _Bool BIGNUM_EMBED_P(VALUE b);
14024
14025
14026VALUE rb_big_mul_normal(VALUE x, VALUE y);
14027VALUE rb_big_mul_balance(VALUE x, VALUE y);
14028VALUE rb_big_mul_karatsuba(VALUE x, VALUE y);
14029VALUE rb_big_mul_toom3(VALUE x, VALUE y);
14030VALUE rb_big_sq_fast(VALUE x);
14031VALUE rb_big_divrem_normal(VALUE x, VALUE y);
14032VALUE rb_big2str_poweroftwo(VALUE x, int base);
14033VALUE rb_big2str_generic(VALUE x, int base);
14034VALUE rb_str2big_poweroftwo(VALUE arg, int base, int badcheck);
14035VALUE rb_str2big_normal(VALUE arg, int base, int badcheck);
14036VALUE rb_str2big_karatsuba(VALUE arg, int base, int badcheck);
14037VALUE rb_big_mul_gmp(VALUE x, VALUE y);
14038VALUE rb_big_divrem_gmp(VALUE x, VALUE y);
14039VALUE rb_big2str_gmp(VALUE x, int base);
14040VALUE rb_str2big_gmp(VALUE arg, int base, int badcheck);
14041VALUE rb_int_parse_cstr(const char *str, ssize_t len, char **endp, size_t *ndigits, int base, int flags);
14042
14043
14044
14045
14046VALUE rb_int128t2big(__int128 n);
14047
14048
14049static inline _Bool
14050BIGNUM_SIGN(VALUE b)
14051{
14052 return RB_FL_TEST_RAW(b, ((VALUE)RUBY_FL_USER1));
14053}
14054static inline _Bool
14055BIGNUM_POSITIVE_P(VALUE b)
14056{
14057 return BIGNUM_SIGN(b);
14058}
14059static inline _Bool
14060BIGNUM_NEGATIVE_P(VALUE b)
14061{
14062 return ! BIGNUM_POSITIVE_P(b);
14063}
14064static inline void
14065BIGNUM_SET_SIGN(VALUE b, _Bool sign)
14066{
14067 if (sign) {
14068 RB_FL_SET_RAW(b, ((VALUE)RUBY_FL_USER1));
14069 }
14070 else {
14071 RB_FL_UNSET_RAW(b, ((VALUE)RUBY_FL_USER1));
14072 }
14073}
14074static inline void
14075BIGNUM_NEGATE(VALUE b)
14076{
14077 RB_FL_REVERSE_RAW(b, ((VALUE)RUBY_FL_USER1));
14078}
14079static inline size_t
14080BIGNUM_LEN(VALUE b)
14081{
14082 if (! BIGNUM_EMBED_P(b)) {
14083 return ((struct RBignum *)(b))->as.heap.len;
14084 }
14085 else {
14086 size_t ret = ((struct RBasic *)(b))->flags;
14087 ret &= (~(~(VALUE)0U << 3) << (((VALUE)RUBY_FL_USHIFT)+3));
14088 ret >>= (((VALUE)RUBY_FL_USHIFT)+3);
14089 return ret;
14090 }
14091}
14092static inline int
14093BIGNUM_LENINT(VALUE b)
14094{
14095 return rb_long2int_inline(BIGNUM_LEN(b));
14096}
14097static inline unsigned int *
14098BIGNUM_DIGITS(VALUE b)
14099{
14100 if (BIGNUM_EMBED_P(b)) {
14101 return ((struct RBignum *)(b))->as.ary;
14102 }
14103 else {
14104 return ((struct RBignum *)(b))->as.heap.digits;
14105 }
14106}
14107static inline _Bool
14108BIGNUM_EMBED_P(VALUE b)
14109{
14110 return RB_FL_TEST_RAW(b, ((VALUE)((VALUE)RUBY_FL_USER2)));
14111}
14112static inline uint16_t ruby_swap16(uint16_t);
14113static inline uint32_t ruby_swap32(uint32_t);
14114static inline uint64_t ruby_swap64(uint64_t);
14115static inline unsigned nlz_int(unsigned x);
14116static inline unsigned nlz_long(unsigned long x);
14117static inline unsigned nlz_long_long(unsigned long long x);
14118static inline unsigned nlz_intptr(uintptr_t x);
14119static inline unsigned nlz_int32(uint32_t x);
14120static inline unsigned nlz_int64(uint64_t x);
14121static inline unsigned nlz_int128(unsigned __int128 x);
14122static inline unsigned rb_popcount32(uint32_t x);
14123static inline unsigned rb_popcount64(uint64_t x);
14124static inline unsigned rb_popcount_intptr(uintptr_t x);
14125static inline int ntz_int32(uint32_t x);
14126static inline int ntz_int64(uint64_t x);
14127static inline int ntz_intptr(uintptr_t x);
14128static inline VALUE RUBY_BIT_ROTL(VALUE, int);
14129static inline VALUE RUBY_BIT_ROTR(VALUE, int);
14130static inline uint16_t
14131ruby_swap16(uint16_t x)
14132{
14133 return __builtin_bswap16(x);
14134}
14135static inline uint32_t
14136ruby_swap32(uint32_t x)
14137{
14138 return __builtin_bswap32(x);
14139}
14140static inline uint64_t
14141ruby_swap64(uint64_t x)
14142{
14143 return __builtin_bswap64(x);
14144}
14145static inline unsigned int
14146nlz_int32(uint32_t x)
14147{
14148 __extension__ _Static_assert(sizeof(int) * 8 == 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT == 32");
14149 return x ? (unsigned int)__builtin_clz(x) : 32;
14150}
14151static inline unsigned int
14152nlz_int64(uint64_t x)
14153{
14154 if (x == 0) {
14155 return 64;
14156 }
14157 else if (sizeof(long) * 8 == 64) {
14158 return (unsigned int)__builtin_clzl((unsigned long)x);
14159 }
14160 else if (sizeof(long long) * 8 == 64) {
14161 return (unsigned int)__builtin_clzll((unsigned long long)x);
14162 }
14163 else {
14164 __builtin_unreachable();
14165 }
14166}
14167static inline unsigned int
14168nlz_int128(unsigned __int128 x)
14169{
14170 uint64_t y = (uint64_t)(x >> 64);
14171 if (x == 0) {
14172 return 128;
14173 }
14174 else if (y == 0) {
14175 return (unsigned int)nlz_int64(x) + 64;
14176 }
14177 else {
14178 return (unsigned int)nlz_int64(y);
14179 }
14180}
14181static inline unsigned int
14182nlz_int(unsigned int x)
14183{
14184 if (sizeof(unsigned int) * 8 == 32) {
14185 return nlz_int32((uint32_t)x);
14186 }
14187 else if (sizeof(unsigned int) * 8 == 64) {
14188 return nlz_int64((uint64_t)x);
14189 }
14190 else {
14191 __builtin_unreachable();
14192 }
14193}
14194static inline unsigned int
14195nlz_long(unsigned long x)
14196{
14197 if (sizeof(unsigned long) * 8 == 32) {
14198 return nlz_int32((uint32_t)x);
14199 }
14200 else if (sizeof(unsigned long) * 8 == 64) {
14201 return nlz_int64((uint64_t)x);
14202 }
14203 else {
14204 __builtin_unreachable();
14205 }
14206}
14207static inline unsigned int
14208nlz_long_long(unsigned long long x)
14209{
14210 if (sizeof(unsigned long long) * 8 == 64) {
14211 return nlz_int64((uint64_t)x);
14212 }
14213 else if (sizeof(unsigned long long) * 8 == 128) {
14214 return nlz_int128((unsigned __int128)x);
14215 }
14216 else {
14217 __builtin_unreachable();
14218 }
14219}
14220static inline unsigned int
14221nlz_intptr(uintptr_t x)
14222{
14223 if (sizeof(uintptr_t) == sizeof(unsigned int)) {
14224 return nlz_int((unsigned int)x);
14225 }
14226 if (sizeof(uintptr_t) == sizeof(unsigned long)) {
14227 return nlz_long((unsigned long)x);
14228 }
14229 if (sizeof(uintptr_t) == sizeof(unsigned long long)) {
14230 return nlz_long_long((unsigned long long)x);
14231 }
14232 else {
14233 __builtin_unreachable();
14234 }
14235}
14236static inline unsigned int
14237rb_popcount32(uint32_t x)
14238{
14239 __extension__ _Static_assert(sizeof(int) * 8 >= 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT >= 32");
14240 return (unsigned int)__builtin_popcount(x);
14241}
14242static inline unsigned int
14243rb_popcount64(uint64_t x)
14244{
14245 if (sizeof(long) * 8 == 64) {
14246 return (unsigned int)__builtin_popcountl((unsigned long)x);
14247 }
14248 else if (sizeof(long long) * 8 == 64) {
14249 return (unsigned int)__builtin_popcountll((unsigned long long)x);
14250 }
14251 else {
14252 __builtin_unreachable();
14253 }
14254}
14255static inline unsigned int
14256rb_popcount_intptr(uintptr_t x)
14257{
14258 if (sizeof(uintptr_t) * 8 == 64) {
14259 return rb_popcount64((uint64_t)x);
14260 }
14261 else if (sizeof(uintptr_t) * 8 == 32) {
14262 return rb_popcount32((uint32_t)x);
14263 }
14264 else {
14265 __builtin_unreachable();
14266 }
14267}
14268static inline int
14269ntz_int32(uint32_t x)
14270{
14271 __extension__ _Static_assert(sizeof(int) * 8 == 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT == 32");
14272 return x ? (unsigned)__builtin_ctz(x) : 32;
14273}
14274static inline int
14275ntz_int64(uint64_t x)
14276{
14277 if (x == 0) {
14278 return 64;
14279 }
14280 else if (sizeof(long) * 8 == 64) {
14281 return (unsigned)__builtin_ctzl((unsigned long)x);
14282 }
14283 else if (sizeof(long long) * 8 == 64) {
14284 return (unsigned)__builtin_ctzll((unsigned long long)x);
14285 }
14286 else {
14287 __builtin_unreachable();
14288 }
14289}
14290static inline int
14291ntz_intptr(uintptr_t x)
14292{
14293 if (sizeof(uintptr_t) * 8 == 64) {
14294 return ntz_int64((uint64_t)x);
14295 }
14296 else if (sizeof(uintptr_t) * 8 == 32) {
14297 return ntz_int32((uint32_t)x);
14298 }
14299 else {
14300 __builtin_unreachable();
14301 }
14302}
14303static inline VALUE
14304RUBY_BIT_ROTL(VALUE v, int n)
14305{
14306 const int m = (sizeof(VALUE) * 8) - 1;
14307 return (v << (n & m)) | (v >> (-n & m));
14308}
14309static inline VALUE
14310RUBY_BIT_ROTR(VALUE v, int n)
14311{
14312 const int m = (sizeof(VALUE) * 8) - 1;
14313 return (v << (-n & m)) | (v >> (n & m));
14314}
14315VALUE rb_int128t2big(__int128 n);
14316static inline long rb_overflowed_fix_to_int(long x);
14317static inline VALUE rb_fix_plus_fix(VALUE x, VALUE y);
14318static inline VALUE rb_fix_minus_fix(VALUE x, VALUE y);
14319static inline VALUE rb_fix_mul_fix(VALUE x, VALUE y);
14320static inline void rb_fix_divmod_fix(VALUE x, VALUE y, VALUE *divp, VALUE *modp);
14321static inline VALUE rb_fix_div_fix(VALUE x, VALUE y);
14322static inline VALUE rb_fix_mod_fix(VALUE x, VALUE y);
14323static inline _Bool FIXNUM_POSITIVE_P(VALUE num);
14324static inline _Bool FIXNUM_NEGATIVE_P(VALUE num);
14325static inline _Bool FIXNUM_ZERO_P(VALUE num);
14326static inline long
14327rb_overflowed_fix_to_int(long x)
14328{
14329 return (long)((unsigned long)(x >> 1) ^ (1LU << (8 * 8 - 1)));
14330}
14331static inline VALUE
14332rb_fix_plus_fix(VALUE x, VALUE y)
14333{
14334 long lz;
14335 if (__builtin_add_overflow((long)x, (long)y-1, &lz)) {
14336 return rb_int2big(rb_overflowed_fix_to_int(lz));
14337 }
14338 else {
14339 return (VALUE)lz;
14340 }
14341}
14342static inline VALUE
14343rb_fix_minus_fix(VALUE x, VALUE y)
14344{
14345 long lz;
14346 if (__builtin_sub_overflow((long)x, (long)y-1, &lz)) {
14347 return rb_int2big(rb_overflowed_fix_to_int(lz));
14348 }
14349 else {
14350 return (VALUE)lz;
14351 }
14352}
14353static inline VALUE
14354rb_fix_mul_fix(VALUE x, VALUE y)
14355{
14356 long lx = rb_fix2long(x);
14357 long ly = rb_fix2long(y);
14358 return (((((__int128)lx * (__int128)ly) < (0x7fffffffffffffffL / 2) + 1) && (((__int128)lx * (__int128)ly) >= ((-0x7fffffffffffffffL - 1L) / 2))) ? RB_INT2FIX((__int128)lx * (__int128)ly) : rb_int128t2big((__int128)lx * (__int128)ly));
14359}
14360static inline void
14361rb_fix_divmod_fix(VALUE a, VALUE b, VALUE *divp, VALUE *modp)
14362{
14363 long x = rb_fix2long(a);
14364 long y = rb_fix2long(b);
14365 long div, mod;
14366 if (x == ((-0x7fffffffffffffffL - 1L) / 2) && y == -1) {
14367 if (divp) *divp = rb_long2num_inline(-((-0x7fffffffffffffffL - 1L) / 2));
14368 if (modp) *modp = RB_INT2FIX(0);
14369 return;
14370 }
14371 div = x / y;
14372 mod = x % y;
14373 if (y > 0 ? mod < 0 : mod > 0) {
14374 mod += y;
14375 div -= 1;
14376 }
14377 if (divp) *divp = RB_INT2FIX(div);
14378 if (modp) *modp = RB_INT2FIX(mod);
14379}
14380static inline VALUE
14381rb_fix_div_fix(VALUE x, VALUE y)
14382{
14383 VALUE div;
14384 rb_fix_divmod_fix(x, y, &div, ((void *)0));
14385 return div;
14386}
14387static inline VALUE
14388rb_fix_mod_fix(VALUE x, VALUE y)
14389{
14390 VALUE mod;
14391 rb_fix_divmod_fix(x, y, ((void *)0), &mod);
14392 return mod;
14393}
14394static inline _Bool
14395FIXNUM_POSITIVE_P(VALUE num)
14396{
14397 return (long)num > (long)__builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
14398}
14399static inline _Bool
14400FIXNUM_NEGATIVE_P(VALUE num)
14401{
14402 return (long)num < 0;
14403}
14404static inline _Bool
14405FIXNUM_ZERO_P(VALUE num)
14406{
14407 return num == __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
14408}
14409enum ruby_num_rounding_mode {
14410 RUBY_NUM_ROUND_HALF_UP,
14411 RUBY_NUM_ROUND_HALF_EVEN,
14412 RUBY_NUM_ROUND_HALF_DOWN,
14413 RUBY_NUM_ROUND_DEFAULT = RUBY_NUM_ROUND_HALF_UP,
14414};
14415typedef double rb_float_value_type;
14416struct RFloat {
14417 struct RBasic basic;
14418 rb_float_value_type float_value;
14419};
14420int rb_num_to_uint(VALUE val, unsigned int *ret);
14421VALUE ruby_num_interval_step_size(VALUE from, VALUE to, VALUE step, int excl);
14422double ruby_float_step_size(double beg, double end, double unit, int excl);
14423int ruby_float_step(VALUE from, VALUE to, VALUE step, int excl, int allow_endless);
14424int rb_num_negative_p(VALUE);
14425VALUE rb_int_succ(VALUE num);
14426VALUE rb_float_uminus(VALUE num);
14427VALUE rb_int_plus(VALUE x, VALUE y);
14428VALUE rb_float_plus(VALUE x, VALUE y);
14429VALUE rb_int_minus(VALUE x, VALUE y);
14430VALUE rb_float_minus(VALUE x, VALUE y);
14431VALUE rb_int_mul(VALUE x, VALUE y);
14432VALUE rb_float_mul(VALUE x, VALUE y);
14433VALUE rb_float_div(VALUE x, VALUE y);
14434VALUE rb_int_idiv(VALUE x, VALUE y);
14435VALUE rb_int_modulo(VALUE x, VALUE y);
14436VALUE rb_int2str(VALUE num, int base);
14437VALUE rb_fix_plus(VALUE x, VALUE y);
14438VALUE rb_int_gt(VALUE x, VALUE y);
14439VALUE rb_float_gt(VALUE x, VALUE y);
14440VALUE rb_int_ge(VALUE x, VALUE y);
14441enum ruby_num_rounding_mode rb_num_get_rounding_option(VALUE opts);
14442double rb_int_fdiv_double(VALUE x, VALUE y);
14443VALUE rb_int_pow(VALUE x, VALUE y);
14444VALUE rb_float_pow(VALUE x, VALUE y);
14445VALUE rb_int_cmp(VALUE x, VALUE y);
14446VALUE rb_int_equal(VALUE x, VALUE y);
14447VALUE rb_int_divmod(VALUE x, VALUE y);
14448VALUE rb_int_and(VALUE x, VALUE y);
14449VALUE rb_int_lshift(VALUE x, VALUE y);
14450VALUE rb_int_div(VALUE x, VALUE y);
14451int rb_int_positive_p(VALUE num);
14452int rb_int_negative_p(VALUE num);
14453VALUE rb_check_integer_type(VALUE);
14454VALUE rb_num_pow(VALUE x, VALUE y);
14455VALUE rb_float_ceil(VALUE num, int ndigits);
14456VALUE rb_float_floor(VALUE x, int ndigits);
14457VALUE rb_float_abs(VALUE flt);
14458static inline VALUE rb_num_compare_with_zero(VALUE num, ID mid);
14459static inline int rb_num_positive_int_p(VALUE num);
14460static inline int rb_num_negative_int_p(VALUE num);
14461static inline double rb_float_flonum_value(VALUE v);
14462static inline double rb_float_noflonum_value(VALUE v);
14463static inline double rb_float_value_inline(VALUE v);
14464static inline VALUE rb_float_new_inline(double d);
14465static inline _Bool INT_POSITIVE_P(VALUE num);
14466static inline _Bool INT_NEGATIVE_P(VALUE num);
14467static inline _Bool FLOAT_ZERO_P(VALUE num);
14468
14469
14470
14471
14472
14473
14474VALUE rb_flo_div_flo(VALUE x, VALUE y);
14475double ruby_float_mod(double x, double y);
14476VALUE rb_float_equal(VALUE x, VALUE y);
14477int rb_float_cmp(VALUE x, VALUE y);
14478VALUE rb_float_eql(VALUE x, VALUE y);
14479VALUE rb_fix_aref(VALUE fix, VALUE idx);
14480VALUE rb_int_zero_p(VALUE num);
14481VALUE rb_int_even_p(VALUE num);
14482VALUE rb_int_odd_p(VALUE num);
14483VALUE rb_int_abs(VALUE num);
14484VALUE rb_int_bit_length(VALUE num);
14485VALUE rb_int_uminus(VALUE num);
14486VALUE rb_int_comp(VALUE num);
14487
14488
14489static inline _Bool
14490INT_POSITIVE_P(VALUE num)
14491{
14492 if (RB_FIXNUM_P(num)) {
14493 return FIXNUM_POSITIVE_P(num);
14494 }
14495 else {
14496 return BIGNUM_POSITIVE_P(num);
14497 }
14498}
14499static inline _Bool
14500INT_NEGATIVE_P(VALUE num)
14501{
14502 if (RB_FIXNUM_P(num)) {
14503 return FIXNUM_NEGATIVE_P(num);
14504 }
14505 else {
14506 return BIGNUM_NEGATIVE_P(num);
14507 }
14508}
14509static inline _Bool
14510FLOAT_ZERO_P(VALUE num)
14511{
14512 return rb_float_value_inline(num) == 0.0;
14513}
14514static inline VALUE
14515rb_num_compare_with_zero(VALUE num, ID mid)
14516{
14517 VALUE zero = __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
14518 VALUE r = rb_check_funcall(num, mid, 1, &zero);
14519 if (r == ((VALUE)RUBY_Qundef)) {
14520 rb_cmperr(num, zero);
14521 }
14522 return r;
14523}
14524static inline int
14525rb_num_positive_int_p(VALUE num)
14526{
14527 const ID mid = '>';
14528 if (RB_FIXNUM_P(num)) {
14529 if (rb_method_basic_definition_p(rb_cInteger, mid))
14530 return FIXNUM_POSITIVE_P(num);
14531 }
14532 else if (RB_TYPE_P(num, RUBY_T_BIGNUM)) {
14533 if (rb_method_basic_definition_p(rb_cInteger, mid))
14534 return BIGNUM_POSITIVE_P(num);
14535 }
14536 return RB_TEST(rb_num_compare_with_zero(num, mid));
14537}
14538static inline int
14539rb_num_negative_int_p(VALUE num)
14540{
14541 const ID mid = '<';
14542 if (RB_FIXNUM_P(num)) {
14543 if (rb_method_basic_definition_p(rb_cInteger, mid))
14544 return FIXNUM_NEGATIVE_P(num);
14545 }
14546 else if (RB_TYPE_P(num, RUBY_T_BIGNUM)) {
14547 if (rb_method_basic_definition_p(rb_cInteger, mid))
14548 return BIGNUM_NEGATIVE_P(num);
14549 }
14550 return RB_TEST(rb_num_compare_with_zero(num, mid));
14551}
14552static inline double
14553rb_float_flonum_value(VALUE v)
14554{
14555 if (v != (VALUE)0x8000000000000002) {
14556 union {
14557 double d;
14558 VALUE v;
14559 } t;
14560 VALUE b63 = (v >> 63);
14561 t.v = RUBY_BIT_ROTR((2 - b63) | (v & ~(VALUE)0x03), 3);
14562 return t.d;
14563 }
14564 return 0.0;
14565}
14566static inline double
14567rb_float_noflonum_value(VALUE v)
14568{
14569 return ((struct RFloat *)(v))->float_value;
14570}
14571static inline double
14572rb_float_value_inline(VALUE v)
14573{
14574 if (RB_FLONUM_P(v)) {
14575 return rb_float_flonum_value(v);
14576 }
14577 return rb_float_noflonum_value(v);
14578}
14579static inline VALUE
14580rb_float_new_inline(double d)
14581{
14582 union {
14583 double d;
14584 VALUE v;
14585 } t;
14586 int bits;
14587 t.d = d;
14588 bits = (int)((VALUE)(t.v >> 60) & 0x7);
14589 if (t.v != 0x3000000000000000 &&
14590 !((bits-3) & ~0x01)) {
14591 return (RUBY_BIT_ROTL(t.v, 3) & ~(VALUE)0x01) | 0x02;
14592 }
14593 else if (t.v == (VALUE)0) {
14594 return 0x8000000000000002;
14595 }
14596 return rb_float_new_in_heap(d);
14597}
14598int ruby_fill_random_bytes(void *, size_t, int);
14599void rb_gc_mark_global_tbl(void);
14600void rb_gc_update_global_tbl(void);
14601size_t rb_generic_ivar_memsize(VALUE);
14602VALUE rb_search_class_path(VALUE);
14603VALUE rb_attr_delete(VALUE, ID);
14604VALUE rb_ivar_lookup(VALUE obj, ID id, VALUE undef);
14605void rb_autoload_str(VALUE mod, ID id, VALUE file);
14606VALUE rb_autoload_at_p(VALUE, ID, int);
14607__attribute__((__noreturn__)) VALUE rb_mod_const_missing(VALUE,VALUE);
14608rb_gvar_getter_t *rb_gvar_getter_function_of(ID);
14609rb_gvar_setter_t *rb_gvar_setter_function_of(ID);
14610void rb_gvar_readonly_setter(VALUE v, ID id, VALUE *_);
14611void rb_gvar_ractor_local(const char *name);
14612static inline _Bool ROBJ_TRANSIENT_P(VALUE obj);
14613static inline void ROBJ_TRANSIENT_SET(VALUE obj);
14614static inline void ROBJ_TRANSIENT_UNSET(VALUE obj);
14615uint32_t rb_obj_ensure_iv_index_mapping(VALUE obj, ID id);
14616
14617
14618void rb_mark_generic_ivar(VALUE);
14619void rb_mv_generic_ivar(VALUE src, VALUE dst);
14620VALUE rb_const_missing(VALUE klass, VALUE name);
14621int rb_class_ivar_set(VALUE klass, ID vid, VALUE value);
14622void rb_iv_tbl_copy(VALUE dst, VALUE src);
14623
14624
14625
14626
14627VALUE rb_gvar_get(ID);
14628VALUE rb_gvar_set(ID, VALUE);
14629VALUE rb_gvar_defined(ID);
14630void rb_const_warn_if_deprecated(const rb_const_entry_t *, VALUE, ID);
14631void rb_init_iv_list(VALUE obj);
14632
14633
14634static inline _Bool
14635ROBJ_TRANSIENT_P(VALUE obj)
14636{
14637 return RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_USER13));
14638}
14639static inline void
14640ROBJ_TRANSIENT_SET(VALUE obj)
14641{
14642 RB_FL_SET_RAW(obj, ((VALUE)RUBY_FL_USER13));
14643}
14644static inline void
14645ROBJ_TRANSIENT_UNSET(VALUE obj)
14646{
14647 RB_FL_UNSET_RAW(obj, ((VALUE)RUBY_FL_USER13));
14648}
14649enum {
14650 RSTRUCT_EMBED_LEN_MAX = RVALUE_EMBED_LEN_MAX,
14651 RSTRUCT_EMBED_LEN_MASK = (RUBY_FL_USER2|RUBY_FL_USER1),
14652 RSTRUCT_EMBED_LEN_SHIFT = (RUBY_FL_USHIFT+1),
14653 RSTRUCT_TRANSIENT_FLAG = ((VALUE)RUBY_FL_USER3),
14654};
14655struct RStruct {
14656 struct RBasic basic;
14657 union {
14658 struct {
14659 long len;
14660 const VALUE *ptr;
14661 } heap;
14662 const VALUE ary[RSTRUCT_EMBED_LEN_MAX];
14663 } as;
14664};
14665VALUE rb_struct_init_copy(VALUE copy, VALUE s);
14666VALUE rb_struct_lookup(VALUE s, VALUE idx);
14667VALUE rb_struct_s_keyword_init(VALUE klass);
14668static inline const VALUE *rb_struct_const_heap_ptr(VALUE st);
14669static inline _Bool RSTRUCT_TRANSIENT_P(VALUE st);
14670static inline void RSTRUCT_TRANSIENT_SET(VALUE st);
14671static inline void RSTRUCT_TRANSIENT_UNSET(VALUE st);
14672static inline long RSTRUCT_EMBED_LEN(VALUE st);
14673static inline long internal_RSTRUCT_LEN(VALUE st);
14674static inline int RSTRUCT_LENINT(VALUE st);
14675static inline const VALUE *RSTRUCT_CONST_PTR(VALUE st);
14676static inline void internal_RSTRUCT_SET(VALUE st, long k, VALUE v);
14677static inline VALUE internal_RSTRUCT_GET(VALUE st, long k);
14678static inline _Bool
14679RSTRUCT_TRANSIENT_P(VALUE st)
14680{
14681 return RB_FL_TEST_RAW(st, RSTRUCT_TRANSIENT_FLAG);
14682}
14683static inline void
14684RSTRUCT_TRANSIENT_SET(VALUE st)
14685{
14686 RB_FL_SET_RAW(st, RSTRUCT_TRANSIENT_FLAG);
14687}
14688static inline void
14689RSTRUCT_TRANSIENT_UNSET(VALUE st)
14690{
14691 RB_FL_UNSET_RAW(st, RSTRUCT_TRANSIENT_FLAG);
14692}
14693static inline long
14694RSTRUCT_EMBED_LEN(VALUE st)
14695{
14696 long ret = RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK);
14697 ret >>= RSTRUCT_EMBED_LEN_SHIFT;
14698 return ret;
14699}
14700static inline long
14701internal_RSTRUCT_LEN(VALUE st)
14702{
14703 if (RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK)) {
14704 return RSTRUCT_EMBED_LEN(st);
14705 }
14706 else {
14707 return ((struct RStruct *)(st))->as.heap.len;
14708 }
14709}
14710static inline int
14711RSTRUCT_LENINT(VALUE st)
14712{
14713 return rb_long2int_inline(internal_RSTRUCT_LEN(st));
14714}
14715static inline const VALUE *
14716RSTRUCT_CONST_PTR(VALUE st)
14717{
14718 const struct RStruct *p = ((struct RStruct *)(st));
14719 if (RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK)) {
14720 return p->as.ary;
14721 }
14722 else {
14723 return p->as.heap.ptr;
14724 }
14725}
14726static inline void
14727internal_RSTRUCT_SET(VALUE st, long k, VALUE v)
14728{
14729 rb_obj_write((VALUE)(st), __extension__({
14730 ;
14731 ; __typeof__((VALUE *)(&RSTRUCT_CONST_PTR(st)[k])) unaligned_member_access_result = ((VALUE *)(&RSTRUCT_CONST_PTR(st)[k]));
14732 ; unaligned_member_access_result; }), (VALUE)(v), "./internal/struct.h", 137);
14733}
14734static inline VALUE
14735internal_RSTRUCT_GET(VALUE st, long k)
14736{
14737 return RSTRUCT_CONST_PTR(st)[k];
14738}
14739static inline const VALUE *
14740rb_struct_const_heap_ptr(VALUE st)
14741{
14742 return ((struct RStruct *)(st))->as.heap.ptr;
14743}
14744struct gen_ivtbl {
14745 uint32_t numiv;
14746 VALUE ivptr[];
14747};
14748int rb_ivar_generic_ivtbl_lookup(VALUE obj, struct gen_ivtbl **);
14749VALUE rb_ivar_generic_lookup_with_index(VALUE obj, ID id, uint32_t index);
14750enum ruby_vminsn_type {
14751 YARVINSN_nop,
14752 YARVINSN_getlocal,
14753 YARVINSN_setlocal,
14754 YARVINSN_getblockparam,
14755 YARVINSN_setblockparam,
14756 YARVINSN_getblockparamproxy,
14757 YARVINSN_getspecial,
14758 YARVINSN_setspecial,
14759 YARVINSN_getinstancevariable,
14760 YARVINSN_setinstancevariable,
14761 YARVINSN_getclassvariable,
14762 YARVINSN_setclassvariable,
14763 YARVINSN_getconstant,
14764 YARVINSN_setconstant,
14765 YARVINSN_getglobal,
14766 YARVINSN_setglobal,
14767 YARVINSN_putnil,
14768 YARVINSN_putself,
14769 YARVINSN_putobject,
14770 YARVINSN_putspecialobject,
14771 YARVINSN_putstring,
14772 YARVINSN_concatstrings,
14773 YARVINSN_anytostring,
14774 YARVINSN_toregexp,
14775 YARVINSN_intern,
14776 YARVINSN_newarray,
14777 YARVINSN_newarraykwsplat,
14778 YARVINSN_duparray,
14779 YARVINSN_duphash,
14780 YARVINSN_expandarray,
14781 YARVINSN_concatarray,
14782 YARVINSN_splatarray,
14783 YARVINSN_newhash,
14784 YARVINSN_newrange,
14785 YARVINSN_pop,
14786 YARVINSN_dup,
14787 YARVINSN_dupn,
14788 YARVINSN_swap,
14789 YARVINSN_topn,
14790 YARVINSN_setn,
14791 YARVINSN_adjuststack,
14792 YARVINSN_defined,
14793 YARVINSN_checkmatch,
14794 YARVINSN_checkkeyword,
14795 YARVINSN_checktype,
14796 YARVINSN_defineclass,
14797 YARVINSN_definemethod,
14798 YARVINSN_definesmethod,
14799 YARVINSN_send,
14800 YARVINSN_opt_send_without_block,
14801 YARVINSN_objtostring,
14802 YARVINSN_opt_str_freeze,
14803 YARVINSN_opt_nil_p,
14804 YARVINSN_opt_str_uminus,
14805 YARVINSN_opt_newarray_max,
14806 YARVINSN_opt_newarray_min,
14807 YARVINSN_invokesuper,
14808 YARVINSN_invokeblock,
14809 YARVINSN_leave,
14810 YARVINSN_throw,
14811 YARVINSN_jump,
14812 YARVINSN_branchif,
14813 YARVINSN_branchunless,
14814 YARVINSN_branchnil,
14815 YARVINSN_opt_getinlinecache,
14816 YARVINSN_opt_setinlinecache,
14817 YARVINSN_once,
14818 YARVINSN_opt_case_dispatch,
14819 YARVINSN_opt_plus,
14820 YARVINSN_opt_minus,
14821 YARVINSN_opt_mult,
14822 YARVINSN_opt_div,
14823 YARVINSN_opt_mod,
14824 YARVINSN_opt_eq,
14825 YARVINSN_opt_neq,
14826 YARVINSN_opt_lt,
14827 YARVINSN_opt_le,
14828 YARVINSN_opt_gt,
14829 YARVINSN_opt_ge,
14830 YARVINSN_opt_ltlt,
14831 YARVINSN_opt_and,
14832 YARVINSN_opt_or,
14833 YARVINSN_opt_aref,
14834 YARVINSN_opt_aset,
14835 YARVINSN_opt_aset_with,
14836 YARVINSN_opt_aref_with,
14837 YARVINSN_opt_length,
14838 YARVINSN_opt_size,
14839 YARVINSN_opt_empty_p,
14840 YARVINSN_opt_succ,
14841 YARVINSN_opt_not,
14842 YARVINSN_opt_regexpmatch2,
14843 YARVINSN_invokebuiltin,
14844 YARVINSN_opt_invokebuiltin_delegate,
14845 YARVINSN_opt_invokebuiltin_delegate_leave,
14846 YARVINSN_getlocal_WC_0,
14847 YARVINSN_getlocal_WC_1,
14848 YARVINSN_setlocal_WC_0,
14849 YARVINSN_setlocal_WC_1,
14850 YARVINSN_putobject_INT2FIX_0_,
14851 YARVINSN_putobject_INT2FIX_1_,
14852 YARVINSN_trace_nop,
14853 YARVINSN_trace_getlocal,
14854 YARVINSN_trace_setlocal,
14855 YARVINSN_trace_getblockparam,
14856 YARVINSN_trace_setblockparam,
14857 YARVINSN_trace_getblockparamproxy,
14858 YARVINSN_trace_getspecial,
14859 YARVINSN_trace_setspecial,
14860 YARVINSN_trace_getinstancevariable,
14861 YARVINSN_trace_setinstancevariable,
14862 YARVINSN_trace_getclassvariable,
14863 YARVINSN_trace_setclassvariable,
14864 YARVINSN_trace_getconstant,
14865 YARVINSN_trace_setconstant,
14866 YARVINSN_trace_getglobal,
14867 YARVINSN_trace_setglobal,
14868 YARVINSN_trace_putnil,
14869 YARVINSN_trace_putself,
14870 YARVINSN_trace_putobject,
14871 YARVINSN_trace_putspecialobject,
14872 YARVINSN_trace_putstring,
14873 YARVINSN_trace_concatstrings,
14874 YARVINSN_trace_anytostring,
14875 YARVINSN_trace_toregexp,
14876 YARVINSN_trace_intern,
14877 YARVINSN_trace_newarray,
14878 YARVINSN_trace_newarraykwsplat,
14879 YARVINSN_trace_duparray,
14880 YARVINSN_trace_duphash,
14881 YARVINSN_trace_expandarray,
14882 YARVINSN_trace_concatarray,
14883 YARVINSN_trace_splatarray,
14884 YARVINSN_trace_newhash,
14885 YARVINSN_trace_newrange,
14886 YARVINSN_trace_pop,
14887 YARVINSN_trace_dup,
14888 YARVINSN_trace_dupn,
14889 YARVINSN_trace_swap,
14890 YARVINSN_trace_topn,
14891 YARVINSN_trace_setn,
14892 YARVINSN_trace_adjuststack,
14893 YARVINSN_trace_defined,
14894 YARVINSN_trace_checkmatch,
14895 YARVINSN_trace_checkkeyword,
14896 YARVINSN_trace_checktype,
14897 YARVINSN_trace_defineclass,
14898 YARVINSN_trace_definemethod,
14899 YARVINSN_trace_definesmethod,
14900 YARVINSN_trace_send,
14901 YARVINSN_trace_opt_send_without_block,
14902 YARVINSN_trace_objtostring,
14903 YARVINSN_trace_opt_str_freeze,
14904 YARVINSN_trace_opt_nil_p,
14905 YARVINSN_trace_opt_str_uminus,
14906 YARVINSN_trace_opt_newarray_max,
14907 YARVINSN_trace_opt_newarray_min,
14908 YARVINSN_trace_invokesuper,
14909 YARVINSN_trace_invokeblock,
14910 YARVINSN_trace_leave,
14911 YARVINSN_trace_throw,
14912 YARVINSN_trace_jump,
14913 YARVINSN_trace_branchif,
14914 YARVINSN_trace_branchunless,
14915 YARVINSN_trace_branchnil,
14916 YARVINSN_trace_opt_getinlinecache,
14917 YARVINSN_trace_opt_setinlinecache,
14918 YARVINSN_trace_once,
14919 YARVINSN_trace_opt_case_dispatch,
14920 YARVINSN_trace_opt_plus,
14921 YARVINSN_trace_opt_minus,
14922 YARVINSN_trace_opt_mult,
14923 YARVINSN_trace_opt_div,
14924 YARVINSN_trace_opt_mod,
14925 YARVINSN_trace_opt_eq,
14926 YARVINSN_trace_opt_neq,
14927 YARVINSN_trace_opt_lt,
14928 YARVINSN_trace_opt_le,
14929 YARVINSN_trace_opt_gt,
14930 YARVINSN_trace_opt_ge,
14931 YARVINSN_trace_opt_ltlt,
14932 YARVINSN_trace_opt_and,
14933 YARVINSN_trace_opt_or,
14934 YARVINSN_trace_opt_aref,
14935 YARVINSN_trace_opt_aset,
14936 YARVINSN_trace_opt_aset_with,
14937 YARVINSN_trace_opt_aref_with,
14938 YARVINSN_trace_opt_length,
14939 YARVINSN_trace_opt_size,
14940 YARVINSN_trace_opt_empty_p,
14941 YARVINSN_trace_opt_succ,
14942 YARVINSN_trace_opt_not,
14943 YARVINSN_trace_opt_regexpmatch2,
14944 YARVINSN_trace_invokebuiltin,
14945 YARVINSN_trace_opt_invokebuiltin_delegate,
14946 YARVINSN_trace_opt_invokebuiltin_delegate_leave,
14947 YARVINSN_trace_getlocal_WC_0,
14948 YARVINSN_trace_getlocal_WC_1,
14949 YARVINSN_trace_setlocal_WC_0,
14950 YARVINSN_trace_setlocal_WC_1,
14951 YARVINSN_trace_putobject_INT2FIX_0_,
14952 YARVINSN_trace_putobject_INT2FIX_1_,
14953 VM_INSTRUCTION_SIZE
14954};
14955extern rb_method_definition_t *rb_method_definition_create(rb_method_type_t type, ID mid);
14956extern void rb_method_definition_set(const rb_method_entry_t *me, rb_method_definition_t *def, void *opts);
14957extern int rb_method_definition_eq(const rb_method_definition_t *d1, const rb_method_definition_t *d2);
14958extern VALUE rb_make_no_method_exception(VALUE exc, VALUE format, VALUE obj,
14959 int argc, const VALUE *argv, int priv);
14960static rb_control_frame_t *vm_get_ruby_level_caller_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
14961static VALUE
14962ruby_vm_special_exception_copy(VALUE exc)
14963{
14964 VALUE e = rb_obj_alloc(rb_class_real(RBASIC_CLASS(exc)));
14965 rb_obj_copy_ivar(e, exc);
14966 return e;
14967}
14968__attribute__((__noreturn__)) static void ec_stack_overflow(rb_execution_context_t *ec, int);
14969static void
14970ec_stack_overflow(rb_execution_context_t *ec, int setup)
14971{
14972 VALUE mesg = rb_ec_vm_ptr(ec)->special_exceptions[ruby_error_sysstack];
14973 ec->raised_flag = RAISED_STACKOVERFLOW;
14974 if (setup) {
14975 VALUE at = rb_ec_backtrace_object(ec);
14976 mesg = ruby_vm_special_exception_copy(mesg);
14977 rb_ivar_set(mesg, idBt, at);
14978 rb_ivar_set(mesg, idBt_locations, at);
14979 }
14980 ec->errinfo = mesg;
14981 rb_ec_tag_jump(ec, RUBY_TAG_RAISE);
14982}
14983__attribute__((__noreturn__)) static void vm_stackoverflow(void);
14984__attribute__((__noinline__)) static __attribute__((__cold__)) void vm_stackoverflow(void);
14985static void
14986vm_stackoverflow(void)
14987{
14988 ec_stack_overflow(rb_current_execution_context(1), 1);
14989}
14990__attribute__((__noreturn__)) static void rb_ec_stack_overflow(rb_execution_context_t *ec, int crit);
14991static void
14992rb_ec_stack_overflow(rb_execution_context_t *ec, int crit)
14993{
14994 if (rb_during_gc()) {
14995 rb_bug("system stack overflow during GC. Faulty native extension?");
14996 }
14997 if (crit) {
14998 ec->raised_flag = RAISED_STACKOVERFLOW;
14999 ec->errinfo = rb_ec_vm_ptr(ec)->special_exceptions[ruby_error_stackfatal];
15000 rb_ec_tag_jump(ec, RUBY_TAG_RAISE);
15001 }
15002 ec_stack_overflow(ec, 1);
15003}
15004__extension__ _Static_assert((-2) == -2, "VM_ENV_DATA_INDEX_ME_CREF" ": " "VM_ENV_DATA_INDEX_ME_CREF == -2");
15005__extension__ _Static_assert((-1) == -1, "VM_ENV_DATA_INDEX_SPECVAL" ": " "VM_ENV_DATA_INDEX_SPECVAL == -1");
15006__extension__ _Static_assert(( 0) == -0, "VM_ENV_DATA_INDEX_FLAGS" ": " "VM_ENV_DATA_INDEX_FLAGS == -0");
15007static void
15008vm_push_frame(rb_execution_context_t *ec,
15009 const rb_iseq_t *iseq,
15010 VALUE type,
15011 VALUE self,
15012 VALUE specval,
15013 VALUE cref_or_me,
15014 const VALUE *pc,
15015 VALUE *sp,
15016 int local_size,
15017 int stack_max)
15018{
15019 rb_control_frame_t *const cfp = ((ec->cfp)-1);
15020 ;
15021 ((void)0);
15022 do { __extension__ _Static_assert(sizeof(*(sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*(sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*(cfp)) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*(cfp)) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&(sp)[(local_size + stack_max)]; if ((__builtin_expect(!!((cfp) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
15023 ;
15024 for (int i=0; i < local_size; i++) {
15025 *sp++ = ((VALUE)RUBY_Qnil);
15026 }
15027 *sp++ = cref_or_me;
15028 *sp++ = specval ;
15029 *sp++ = type;
15030 *cfp = (const struct rb_control_frame_struct) {
15031 .pc = pc,
15032 .sp = sp,
15033 .iseq = iseq,
15034 .self = self,
15035 .ep = sp - 1,
15036 .block_code = ((void *)0),
15037 .__bp__ = sp,
15038 .jit_return = ((void *)0)
15039 };
15040 ec->cfp = cfp;
15041 if (0 == 2) {
15042 rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
15043 }
15044 ;
15045}
15046static inline int
15047vm_pop_frame(rb_execution_context_t *ec, rb_control_frame_t *cfp, const VALUE *ep)
15048{
15049 VALUE flags = ep[( 0)];
15050 if ((((0) > 0) ? (0) : 0) >= 4) rb_gc_verify_internal_consistency();
15051 if (0 == 2) rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
15052 rb_vm_check_ints(ec);
15053 ec->cfp = ((cfp)+1);
15054 return flags & VM_FRAME_FLAG_FINISH;
15055}
15056static void
15057rb_vm_pop_frame(rb_execution_context_t *ec)
15058{
15059 vm_pop_frame(ec, ec->cfp, ec->cfp->ep);
15060}
15061static inline VALUE
15062rb_arity_error_new(int argc, int min, int max)
15063{
15064 VALUE err_mess = 0;
15065 if (min == max) {
15066 err_mess = rb_sprintf("wrong number of arguments (given %d, expected %d)", argc, min);
15067 }
15068 else if (max == (-1)) {
15069 err_mess = rb_sprintf("wrong number of arguments (given %d, expected %d+)", argc, min);
15070 }
15071 else {
15072 err_mess = rb_sprintf("wrong number of arguments (given %d, expected %d..%d)", argc, min, max);
15073 }
15074 return rb_exc_new_str(rb_eArgError, err_mess);
15075}
15076static void
15077rb_error_arity(int argc, int min, int max)
15078{
15079 rb_exc_raise(rb_arity_error_new(argc, min, max));
15080}
15081__attribute__((__noinline__)) static void vm_env_write_slowpath(const VALUE *ep, int index, VALUE v);
15082static void
15083vm_env_write_slowpath(const VALUE *ep, int index, VALUE v)
15084{
15085 rb_gc_writebarrier_remember(VM_ENV_ENVVAL(ep));
15086 VM_FORCE_WRITE(&ep[index], v);
15087 VM_ENV_FLAGS_UNSET(ep, VM_ENV_FLAG_WB_REQUIRED);
15088 ((void)0);
15089}
15090static inline void
15091vm_env_write(const VALUE *ep, int index, VALUE v)
15092{
15093 VALUE flags = ep[( 0)];
15094 if ((__builtin_expect(!!((flags & VM_ENV_FLAG_WB_REQUIRED) == 0), 1))) {
15095 VM_STACK_ENV_WRITE(ep, index, v);
15096 }
15097 else {
15098 vm_env_write_slowpath(ep, index, v);
15099 }
15100}
15101static VALUE
15102rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler)
15103{
15104 if (block_handler == 0) {
15105 return ((VALUE)RUBY_Qnil);
15106 }
15107 else {
15108 switch (vm_block_handler_type(block_handler)) {
15109 case block_handler_type_iseq:
15110 case block_handler_type_ifunc:
15111 return rb_vm_make_proc(ec, VM_BH_TO_CAPT_BLOCK(block_handler), rb_cProc);
15112 case block_handler_type_symbol:
15113 return rb_sym_to_proc(VM_BH_TO_SYMBOL(block_handler));
15114 case block_handler_type_proc:
15115 return VM_BH_TO_PROC(block_handler);
15116 default:
15117 __builtin_unreachable();
15118 }
15119 }
15120}
15121static inline struct vm_svar *
15122lep_svar(const rb_execution_context_t *ec, const VALUE *lep)
15123{
15124 VALUE svar;
15125 if (lep && (ec == ((void *)0) || ec->root_lep != lep)) {
15126 svar = lep[(-2)];
15127 }
15128 else {
15129 svar = ec->root_svar;
15130 }
15131 ((void)0);
15132 return (struct vm_svar *)svar;
15133}
15134static inline void
15135lep_svar_write(const rb_execution_context_t *ec, const VALUE *lep, const struct vm_svar *svar)
15136{
15137 ((void)0);
15138 if (lep && (ec == ((void *)0) || ec->root_lep != lep)) {
15139 vm_env_write(lep, (-2), (VALUE)svar);
15140 }
15141 else {
15142 rb_obj_write((VALUE)(rb_ec_thread_ptr(ec)->self), __extension__({
15143;
15144; __typeof__((VALUE *)(&ec->root_svar)) unaligned_member_access_result = ((VALUE *)(&ec->root_svar));
15145; unaligned_member_access_result; }), (VALUE)(svar), "./vm_insnhelper.c", 544);
15146 }
15147}
15148static VALUE
15149lep_svar_get(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key)
15150{
15151 const struct vm_svar *svar = lep_svar(ec, lep);
15152 if ((VALUE)svar == ((VALUE)RUBY_Qfalse) || imemo_type((VALUE)svar) != imemo_svar) return ((VALUE)RUBY_Qnil);
15153 switch (key) {
15154 case VM_SVAR_LASTLINE:
15155 return svar->lastline;
15156 case VM_SVAR_BACKREF:
15157 return svar->backref;
15158 default: {
15159 const VALUE ary = svar->others;
15160 if (RB_NIL_P(ary)) {
15161 return ((VALUE)RUBY_Qnil);
15162 }
15163 else {
15164 return rb_ary_entry(ary, key - VM_SVAR_EXTRA_START);
15165 }
15166 }
15167 }
15168}
15169static struct vm_svar *
15170svar_new(VALUE obj)
15171{
15172 return (struct vm_svar *)rb_imemo_new(imemo_svar, ((VALUE)RUBY_Qnil), ((VALUE)RUBY_Qnil), ((VALUE)RUBY_Qnil), obj);
15173}
15174static void
15175lep_svar_set(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key, VALUE val)
15176{
15177 struct vm_svar *svar = lep_svar(ec, lep);
15178 if ((VALUE)svar == ((VALUE)RUBY_Qfalse) || imemo_type((VALUE)svar) != imemo_svar) {
15179 lep_svar_write(ec, lep, svar = svar_new((VALUE)svar));
15180 }
15181 switch (key) {
15182 case VM_SVAR_LASTLINE:
15183 rb_obj_write((VALUE)(svar), __extension__({
15184;
15185; __typeof__((VALUE *)(&svar->lastline)) unaligned_member_access_result = ((VALUE *)(&svar->lastline));
15186; unaligned_member_access_result; }), (VALUE)(val), "./vm_insnhelper.c", 590);
15187 return;
15188 case VM_SVAR_BACKREF:
15189 rb_obj_write((VALUE)(svar), __extension__({
15190;
15191; __typeof__((VALUE *)(&svar->backref)) unaligned_member_access_result = ((VALUE *)(&svar->backref));
15192; unaligned_member_access_result; }), (VALUE)(val), "./vm_insnhelper.c", 593);
15193 return;
15194 default: {
15195 VALUE ary = svar->others;
15196 if (RB_NIL_P(ary)) {
15197 rb_obj_write((VALUE)(svar), __extension__({
15198 ;
15199 ; __typeof__((VALUE *)(&svar->others)) unaligned_member_access_result = ((VALUE *)(&svar->others));
15200 ; unaligned_member_access_result; }), (VALUE)(ary = rb_ary_new()), "./vm_insnhelper.c", 599);
15201 }
15202 rb_ary_store(ary, key - VM_SVAR_EXTRA_START, val);
15203 }
15204 }
15205}
15206static inline VALUE
15207vm_getspecial(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key, rb_num_t type)
15208{
15209 VALUE val;
15210 if (type == 0) {
15211 val = lep_svar_get(ec, lep, key);
15212 }
15213 else {
15214 VALUE backref = lep_svar_get(ec, lep, VM_SVAR_BACKREF);
15215 if (type & 0x01) {
15216 switch (type >> 1) {
15217 case '&':
15218 val = rb_reg_last_match(backref);
15219 break;
15220 case '`':
15221 val = rb_reg_match_pre(backref);
15222 break;
15223 case '\'':
15224 val = rb_reg_match_post(backref);
15225 break;
15226 case '+':
15227 val = rb_reg_match_last(backref);
15228 break;
15229 default:
15230 rb_bug("unexpected back-ref");
15231 }
15232 }
15233 else {
15234 val = rb_reg_nth_match((int)(type >> 1), backref);
15235 }
15236 }
15237 return val;
15238}
15239__attribute__((__pure__)) static rb_callable_method_entry_t *check_method_entry(VALUE obj, int can_be_svar);
15240static rb_callable_method_entry_t *
15241check_method_entry(VALUE obj, int can_be_svar)
15242{
15243 if (obj == ((VALUE)RUBY_Qfalse)) return ((void *)0);
15244 switch (imemo_type(obj)) {
15245 case imemo_ment:
15246 return (rb_callable_method_entry_t *)obj;
15247 case imemo_cref:
15248 return ((void *)0);
15249 case imemo_svar:
15250 if (can_be_svar) {
15251 return check_method_entry(((struct vm_svar *)obj)->cref_or_me, 0);
15252 }
15253 default:
15254 return ((void *)0);
15255 }
15256}
15257static const rb_callable_method_entry_t *
15258rb_vm_frame_method_entry(const rb_control_frame_t *cfp)
15259{
15260 const VALUE *ep = cfp->ep;
15261 rb_callable_method_entry_t *me;
15262 while (!VM_ENV_LOCAL_P(ep)) {
15263 if ((me = check_method_entry(ep[(-2)], 0)) != ((void *)0)) return me;
15264 ep = VM_ENV_PREV_EP(ep);
15265 }
15266 return check_method_entry(ep[(-2)], 1);
15267}
15268static const rb_iseq_t *
15269method_entry_iseqptr(const rb_callable_method_entry_t *me)
15270{
15271 switch (me->def->type) {
15272 case VM_METHOD_TYPE_ISEQ:
15273 return me->def->body.iseq.iseqptr;
15274 default:
15275 return ((void *)0);
15276 }
15277}
15278static rb_cref_t *
15279method_entry_cref(const rb_callable_method_entry_t *me)
15280{
15281 switch (me->def->type) {
15282 case VM_METHOD_TYPE_ISEQ:
15283 return me->def->body.iseq.cref;
15284 default:
15285 return ((void *)0);
15286 }
15287}
15288__attribute__((__pure__)) static rb_cref_t *check_cref(VALUE, int);
15289static rb_cref_t *
15290check_cref(VALUE obj, int can_be_svar)
15291{
15292 if (obj == ((VALUE)RUBY_Qfalse)) return ((void *)0);
15293 switch (imemo_type(obj)) {
15294 case imemo_ment:
15295 return method_entry_cref((rb_callable_method_entry_t *)obj);
15296 case imemo_cref:
15297 return (rb_cref_t *)obj;
15298 case imemo_svar:
15299 if (can_be_svar) {
15300 return check_cref(((struct vm_svar *)obj)->cref_or_me, 0);
15301 }
15302 default:
15303 return ((void *)0);
15304 }
15305}
15306static inline rb_cref_t *
15307vm_env_cref(const VALUE *ep)
15308{
15309 rb_cref_t *cref;
15310 while (!VM_ENV_LOCAL_P(ep)) {
15311 if ((cref = check_cref(ep[(-2)], 0)) != ((void *)0)) return cref;
15312 ep = VM_ENV_PREV_EP(ep);
15313 }
15314 return check_cref(ep[(-2)], 1);
15315}
15316static int
15317is_cref(const VALUE v, int can_be_svar)
15318{
15319 if (RB_TYPE_P(v, RUBY_T_IMEMO)) {
15320 switch (imemo_type(v)) {
15321 case imemo_cref:
15322 return 1;
15323 case imemo_svar:
15324 if (can_be_svar) return is_cref(((struct vm_svar *)v)->cref_or_me, 0);
15325 default:
15326 break;
15327 }
15328 }
15329 return 0;
15330}
15331static int
15332vm_env_cref_by_cref(const VALUE *ep)
15333{
15334 while (!VM_ENV_LOCAL_P(ep)) {
15335 if (is_cref(ep[(-2)], 0)) return 1;
15336 ep = VM_ENV_PREV_EP(ep);
15337 }
15338 return is_cref(ep[(-2)], 1);
15339}
15340static rb_cref_t *
15341cref_replace_with_duplicated_cref_each_frame(const VALUE *vptr, int can_be_svar, VALUE parent)
15342{
15343 const VALUE v = *vptr;
15344 rb_cref_t *cref, *new_cref;
15345 if (RB_TYPE_P(v, RUBY_T_IMEMO)) {
15346 switch (imemo_type(v)) {
15347 case imemo_cref:
15348 cref = (rb_cref_t *)v;
15349 new_cref = vm_cref_dup(cref);
15350 if (parent) {
15351 rb_obj_write((VALUE)(parent), __extension__({
15352 ;
15353 ; __typeof__((VALUE *)(vptr)) unaligned_member_access_result = ((VALUE *)(vptr));
15354 ; unaligned_member_access_result; }), (VALUE)(new_cref), "./vm_insnhelper.c", 785);
15355 }
15356 else {
15357 VM_FORCE_WRITE(vptr, (VALUE)new_cref);
15358 }
15359 return (rb_cref_t *)new_cref;
15360 case imemo_svar:
15361 if (can_be_svar) {
15362 return cref_replace_with_duplicated_cref_each_frame(&((struct vm_svar *)v)->cref_or_me, 0, v);
15363 }
15364 case imemo_ment:
15365 rb_bug("cref_replace_with_duplicated_cref_each_frame: unreachable");
15366 default:
15367 break;
15368 }
15369 }
15370 return 0;
15371}
15372static rb_cref_t *
15373vm_cref_replace_with_duplicated_cref(const VALUE *ep)
15374{
15375 if (vm_env_cref_by_cref(ep)) {
15376 rb_cref_t *cref;
15377 VALUE envval;
15378 while (!VM_ENV_LOCAL_P(ep)) {
15379 envval = VM_ENV_ESCAPED_P(ep) ? VM_ENV_ENVVAL(ep) : ((VALUE)RUBY_Qfalse);
15380 if ((cref = cref_replace_with_duplicated_cref_each_frame(&ep[(-2)], 0, envval)) != ((void *)0)) {
15381 return cref;
15382 }
15383 ep = VM_ENV_PREV_EP(ep);
15384 }
15385 envval = VM_ENV_ESCAPED_P(ep) ? VM_ENV_ENVVAL(ep) : ((VALUE)RUBY_Qfalse);
15386 return cref_replace_with_duplicated_cref_each_frame(&ep[(-2)], 1, envval);
15387 }
15388 else {
15389 rb_bug("vm_cref_dup: unreachable");
15390 }
15391}
15392static rb_cref_t *
15393vm_get_cref(const VALUE *ep)
15394{
15395 rb_cref_t *cref = vm_env_cref(ep);
15396 if (cref != ((void *)0)) {
15397 return cref;
15398 }
15399 else {
15400 rb_bug("vm_get_cref: unreachable");
15401 }
15402}static inline
15403rb_cref_t *
15404rb_vm_get_cref(const VALUE *ep)
15405{
15406 return vm_get_cref(ep);
15407}
15408static rb_cref_t *
15409vm_ec_cref(const rb_execution_context_t *ec)
15410{
15411 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
15412 if (cfp == ((void *)0)) {
15413 return ((void *)0);
15414 }
15415 return vm_get_cref(cfp->ep);
15416}
15417static const rb_cref_t *
15418vm_get_const_key_cref(const VALUE *ep)
15419{
15420 const rb_cref_t *cref = vm_get_cref(ep);
15421 const rb_cref_t *key_cref = cref;
15422 while (cref) {
15423 if (RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_SINGLETON)) ||
15424 RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_USER6))) {
15425 return key_cref;
15426 }
15427 cref = CREF_NEXT(cref);
15428 }
15429 return ((void *)0);
15430}static inline
15431void
15432rb_vm_rewrite_cref(rb_cref_t *cref, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr)
15433{
15434 rb_cref_t *new_cref;
15435 while (cref) {
15436 if (CREF_CLASS(cref) == old_klass) {
15437 new_cref = vm_cref_new_use_prev(new_klass, METHOD_VISI_UNDEF, 0, cref, 0);
15438 *new_cref_ptr = new_cref;
15439 return;
15440 }
15441 new_cref = vm_cref_new_use_prev(CREF_CLASS(cref), METHOD_VISI_UNDEF, 0, cref, 0);
15442 cref = CREF_NEXT(cref);
15443 *new_cref_ptr = new_cref;
15444 new_cref_ptr = &new_cref->next;
15445 }
15446 *new_cref_ptr = ((void *)0);
15447}
15448static rb_cref_t *
15449vm_cref_push(const rb_execution_context_t *ec, VALUE klass, const VALUE *ep, int pushed_by_eval, int singleton)
15450{
15451 rb_cref_t *prev_cref = ((void *)0);
15452 if (ep) {
15453 prev_cref = vm_env_cref(ep);
15454 }
15455 else {
15456 rb_control_frame_t *cfp = vm_get_ruby_level_caller_cfp(ec, ec->cfp);
15457 if (cfp) {
15458 prev_cref = vm_env_cref(cfp->ep);
15459 }
15460 }
15461 return vm_cref_new(klass, METHOD_VISI_PUBLIC, 0, prev_cref, pushed_by_eval, singleton);
15462}
15463static inline VALUE
15464vm_get_cbase(const VALUE *ep)
15465{
15466 const rb_cref_t *cref = vm_get_cref(ep);
15467 return CREF_CLASS_FOR_DEFINITION(cref);
15468}
15469static inline VALUE
15470vm_get_const_base(const VALUE *ep)
15471{
15472 const rb_cref_t *cref = vm_get_cref(ep);
15473 while (cref) {
15474 if (!CREF_PUSHED_BY_EVAL(cref)) {
15475 return CREF_CLASS_FOR_DEFINITION(cref);
15476 }
15477 cref = CREF_NEXT(cref);
15478 }
15479 return ((VALUE)RUBY_Qundef);
15480}
15481static inline void
15482vm_check_if_namespace(VALUE klass)
15483{
15484 if (!RB_TYPE_P(klass, RUBY_T_CLASS) && !RB_TYPE_P(klass, RUBY_T_MODULE)) {
15485 rb_raise(rb_eTypeError, "%+""l""i" "\v"" is not a class/module", klass);
15486 }
15487}
15488static inline void
15489vm_ensure_not_refinement_module(VALUE self)
15490{
15491 if (RB_TYPE_P(self, RUBY_T_MODULE) && RB_FL_TEST(self, RMODULE_IS_REFINEMENT)) {
15492 rb_warn("not defined at the refinement, but at the outer class/module");
15493 }
15494}
15495static inline VALUE
15496vm_get_iclass(const rb_control_frame_t *cfp, VALUE klass)
15497{
15498 return klass;
15499}
15500static inline VALUE
15501vm_get_ev_const(rb_execution_context_t *ec, VALUE orig_klass, ID id, _Bool allow_nil, int is_defined)
15502{
15503 void rb_const_warn_if_deprecated(const rb_const_entry_t *ce, VALUE klass, ID id);
15504 VALUE val;
15505 if (RB_NIL_P(orig_klass) && allow_nil) {
15506 const rb_cref_t *root_cref = vm_get_cref(ec->cfp->ep);
15507 const rb_cref_t *cref;
15508 VALUE klass = ((VALUE)RUBY_Qnil);
15509 while (root_cref && CREF_PUSHED_BY_EVAL(root_cref)) {
15510 root_cref = CREF_NEXT(root_cref);
15511 }
15512 cref = root_cref;
15513 while (cref && CREF_NEXT(cref)) {
15514 if (CREF_PUSHED_BY_EVAL(cref)) {
15515 klass = ((VALUE)RUBY_Qnil);
15516 }
15517 else {
15518 klass = CREF_CLASS(cref);
15519 }
15520 cref = CREF_NEXT(cref);
15521 if (!RB_NIL_P(klass)) {
15522 VALUE av, am = 0;
15523 rb_const_entry_t *ce;
15524 search_continue:
15525 if ((ce = rb_const_lookup(klass, id))) {
15526 rb_const_warn_if_deprecated(ce, klass, id);
15527 val = ce->value;
15528 if (val == ((VALUE)RUBY_Qundef)) {
15529 if (am == klass) break;
15530 am = klass;
15531 if (is_defined) return 1;
15532 if (rb_autoloading_value(klass, id, &av, ((void *)0))) return av;
15533 rb_autoload_load(klass, id);
15534 goto search_continue;
15535 }
15536 else {
15537 if (is_defined) {
15538 return 1;
15539 }
15540 else {
15541 if ((__builtin_expect(!!(!rb_ractor_main_p()), 0))) {
15542 if (!rb_ractor_shareable_p(val)) {
15543 rb_raise(rb_eRactorIsolationError,
15544 "can not access non-shareable objects in constant %""l""i" "\v""::%s by non-main ractor.", rb_class_path(klass), rb_id2name(id));
15545 }
15546 }
15547 return val;
15548 }
15549 }
15550 }
15551 }
15552 }
15553 if (root_cref && !RB_NIL_P(CREF_CLASS(root_cref))) {
15554 klass = vm_get_iclass(ec->cfp, CREF_CLASS(root_cref));
15555 }
15556 else {
15557 klass = rb_class_of(ec->cfp->self);
15558 }
15559 if (is_defined) {
15560 return rb_const_defined(klass, id);
15561 }
15562 else {
15563 return rb_const_get(klass, id);
15564 }
15565 }
15566 else {
15567 vm_check_if_namespace(orig_klass);
15568 if (is_defined) {
15569 return rb_public_const_defined_from(orig_klass, id);
15570 }
15571 else {
15572 return rb_public_const_get_from(orig_klass, id);
15573 }
15574 }
15575}
15576static inline VALUE
15577vm_get_cvar_base(const rb_cref_t *cref, const rb_control_frame_t *cfp, int top_level_raise)
15578{
15579 VALUE klass;
15580 if (!cref) {
15581 rb_bug("vm_get_cvar_base: no cref");
15582 }
15583 while (CREF_NEXT(cref) &&
15584 (RB_NIL_P(CREF_CLASS(cref)) || RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_SINGLETON)) ||
15585 CREF_PUSHED_BY_EVAL(cref) || CREF_SINGLETON(cref))) {
15586 cref = CREF_NEXT(cref);
15587 }
15588 if (top_level_raise && !CREF_NEXT(cref)) {
15589 rb_raise(rb_eRuntimeError, "class variable access from toplevel");
15590 }
15591 klass = vm_get_iclass(cfp, CREF_CLASS(cref));
15592 if (RB_NIL_P(klass)) {
15593 rb_raise(rb_eTypeError, "no class variables available");
15594 }
15595 return klass;
15596}
15597static VALUE
15598vm_search_const_defined_class(const VALUE cbase, ID id)
15599{
15600 if (rb_const_defined_at(cbase, id)) return cbase;
15601 if (cbase == rb_cObject) {
15602 VALUE tmp = RCLASS_SUPER(cbase);
15603 while (tmp) {
15604 if (rb_const_defined_at(tmp, id)) return tmp;
15605 tmp = RCLASS_SUPER(tmp);
15606 }
15607 }
15608 return 0;
15609}
15610static _Bool
15611iv_index_tbl_lookup(struct st_table *iv_index_tbl, ID id, struct rb_iv_index_tbl_entry **ent)
15612{
15613 int found;
15614 st_data_t ent_data;
15615 if (iv_index_tbl == ((void *)0)) return 0;
15616 { unsigned int _lev; rb_vm_lock_enter(&_lev, "./vm_insnhelper.c", 1090);;
15617 {
15618 found = rb_st_lookup(iv_index_tbl, (st_data_t)id, &ent_data);
15619 }
15620 rb_vm_lock_leave(&_lev, "./vm_insnhelper.c", 1094); };
15621 if (found) *ent = (struct rb_iv_index_tbl_entry *)ent_data;
15622 return found ? 1 : 0;
15623}
15624__attribute__ ((__always_inline__)) static void fill_ivar_cache(const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr, struct rb_iv_index_tbl_entry *ent);
15625static inline void
15626fill_ivar_cache(const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr, struct rb_iv_index_tbl_entry *ent)
15627{
15628 if (!is_attr) {
15629 ic->entry = ent;
15630 (rb_obj_written((VALUE)(iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(ent->class_value), "./vm_insnhelper.c", 1108));
15631 }
15632 else {
15633 vm_cc_attr_index_set(cc, (int)ent->index + 1);
15634 }
15635}
15636__attribute__ ((__always_inline__)) static VALUE vm_getivar(VALUE, ID, const rb_iseq_t *, IVC, const struct rb_callcache *, int);
15637static inline VALUE
15638vm_getivar(VALUE obj, ID id, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
15639{
15640 VALUE val = ((VALUE)RUBY_Qundef);
15641 if (RB_SPECIAL_CONST_P(obj)) {
15642 }
15643 else if ((__builtin_expect(!!(is_attr ? (!!(vm_cc_attr_index(cc) > 0)) : (!!(ic->entry && ic->entry->class_serial == (((struct RClass *)(((struct RBasic *)(obj))->klass))->class_serial)))), 1))) {
15644 uint32_t index = !is_attr ? ic->entry->index : (vm_cc_attr_index(cc) - 1);
15645 ((void)0);
15646 if ((__builtin_expect(!!(RB_BUILTIN_TYPE(obj) == RUBY_T_OBJECT), 1)) &&
15647 (__builtin_expect(!!(index < ROBJECT_NUMIV(obj)), 1))) {
15648 val = ROBJECT_IVPTR(obj)[index];
15649 ((void)0);
15650 }
15651 else if (RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_EXIVAR))) {
15652 val = rb_ivar_generic_lookup_with_index(obj, id, index);
15653 }
15654 goto ret;
15655 }
15656 else {
15657 struct rb_iv_index_tbl_entry *ent;
15658 if (RB_BUILTIN_TYPE(obj) == RUBY_T_OBJECT) {
15659 struct st_table *iv_index_tbl = ROBJECT_IV_INDEX_TBL_inline(obj);
15660 if (iv_index_tbl && iv_index_tbl_lookup(iv_index_tbl, id, &ent)) {
15661 fill_ivar_cache(iseq, ic, cc, is_attr, ent);
15662 if (ent->index < ROBJECT_NUMIV(obj)) {
15663 val = ROBJECT_IVPTR(obj)[ent->index];
15664 ((void)0);
15665 }
15666 }
15667 }
15668 else if (RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_EXIVAR))) {
15669 struct st_table *iv_index_tbl = ((((struct RClass *)(rb_obj_class(obj)))->ptr)->iv_index_tbl);
15670 if (iv_index_tbl && iv_index_tbl_lookup(iv_index_tbl, id, &ent)) {
15671 fill_ivar_cache(iseq, ic, cc, is_attr, ent);
15672 val = rb_ivar_generic_lookup_with_index(obj, id, ent->index);
15673 }
15674 }
15675 else {
15676 goto general_path;
15677 }
15678 ret:
15679 if ((__builtin_expect(!!(val != ((VALUE)RUBY_Qundef)), 1))) {
15680 return val;
15681 }
15682 else {
15683 return ((VALUE)RUBY_Qnil);
15684 }
15685 }
15686 general_path:
15687 ((void)0);
15688 if (is_attr) {
15689 return rb_attr_get(obj, id);
15690 }
15691 else {
15692 return rb_ivar_get(obj, id);
15693 }
15694}
15695__attribute__ ((__always_inline__)) static VALUE vm_setivar_slowpath(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr);
15696__attribute__((__noinline__)) static VALUE vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic);
15697__attribute__((__noinline__)) static VALUE vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc);
15698static VALUE
15699vm_setivar_slowpath(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
15700{
15701 do { VALUE frozen_obj = (obj); if ((__builtin_expect(!!(RB_OBJ_FROZEN(frozen_obj)), 0))) { rb_error_frozen_object(frozen_obj); } } while (0);
15702 if (RB_TYPE_P(obj, RUBY_T_OBJECT)) {
15703 struct st_table *iv_index_tbl = ROBJECT_IV_INDEX_TBL_inline(obj);
15704 struct rb_iv_index_tbl_entry *ent;
15705 if (iv_index_tbl_lookup(iv_index_tbl, id, &ent)) {
15706 if (!is_attr) {
15707 ic->entry = ent;
15708 (rb_obj_written((VALUE)(iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(ent->class_value), "./vm_insnhelper.c", 1212));
15709 }
15710 else if (ent->index >= 0x7fffffff) {
15711 rb_raise(rb_eArgError, "too many instance variables");
15712 }
15713 else {
15714 vm_cc_attr_index_set(cc, (int)(ent->index + 1));
15715 }
15716 uint32_t index = ent->index;
15717 if ((__builtin_expect(!!(index >= ROBJECT_NUMIV(obj)), 0))) {
15718 rb_init_iv_list(obj);
15719 }
15720 VALUE *ptr = ROBJECT_IVPTR(obj);
15721 rb_obj_write((VALUE)(obj), __extension__({
15722 ;
15723 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
15724 ; unaligned_member_access_result; }), (VALUE)(val), "./vm_insnhelper.c", 1227);
15725 ((void)0);
15726 return val;
15727 }
15728 }
15729 ((void)0);
15730 return rb_ivar_set(obj, id, val);
15731}
15732static VALUE
15733vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic)
15734{
15735 return vm_setivar_slowpath(obj, id, val, iseq, ic, ((void *)0), 0);
15736}
15737static VALUE
15738vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc)
15739{
15740 return vm_setivar_slowpath(obj, id, val, ((void *)0), ((void *)0), cc, 1);
15741}
15742static inline VALUE
15743vm_setivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
15744{
15745 if ((__builtin_expect(!!(RB_TYPE_P(obj, RUBY_T_OBJECT)), 1)) &&
15746 (__builtin_expect(!!(!RB_OBJ_FROZEN_RAW(obj)), 1))) {
15747 ((void)0);
15748 if ((__builtin_expect(!!((!is_attr && (!!(ic->entry && ic->entry->class_serial == (((struct RClass *)(((struct RBasic *)(obj))->klass))->class_serial)))) || ( is_attr && (!!(vm_cc_attr_index(cc) > 0)))), 1))) {
15749 uint32_t index = !is_attr ? ic->entry->index : vm_cc_attr_index(cc)-1;
15750 if ((__builtin_expect(!!(index >= ROBJECT_NUMIV(obj)), 0))) {
15751 rb_init_iv_list(obj);
15752 }
15753 VALUE *ptr = ROBJECT_IVPTR(obj);
15754 rb_obj_write((VALUE)(obj), __extension__({
15755 ;
15756 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
15757 ; unaligned_member_access_result; }), (VALUE)(val), "./vm_insnhelper.c", 1268);
15758 ((void)0);
15759 return val;
15760 }
15761 }
15762 else {
15763 ((void)0);
15764 }
15765 if (is_attr) {
15766 return vm_setivar_slowpath_attr(obj, id, val, cc);
15767 }
15768 else {
15769 return vm_setivar_slowpath_ivar(obj, id, val, iseq, ic);
15770 }
15771}
15772static VALUE
15773update_classvariable_cache(const rb_iseq_t *iseq, VALUE klass, ID id, ICVARC ic)
15774{
15775 VALUE defined_class = 0;
15776 VALUE cvar_value = rb_cvar_find(klass, id, &defined_class);
15777 if (RB_TYPE_P(defined_class, RUBY_T_ICLASS)) {
15778 defined_class = ((struct RBasic *)(defined_class))->klass;
15779 }
15780 struct rb_id_table *rb_cvc_tbl = ((((struct RClass *)(defined_class))->ptr)->cvc_tbl);
15781 if (!rb_cvc_tbl) {
15782 rb_bug("the cvc table should be set");
15783 }
15784 VALUE ent_data;
15785 if (!rb_id_table_lookup(rb_cvc_tbl, id, &ent_data)) {
15786 rb_bug("should have cvar cache entry");
15787 }
15788 struct rb_cvar_class_tbl_entry *ent = (void *)ent_data;
15789 ent->global_cvar_state = (ruby_vm_global_cvar_state);
15790 ic->entry = ent;
15791 (rb_obj_written((VALUE)(iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(ent->class_value), "./vm_insnhelper.c", 1309));
15792 return cvar_value;
15793}
15794static inline VALUE
15795vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, ICVARC ic)
15796{
15797 const rb_cref_t *cref;
15798 if (ic->entry && ic->entry->global_cvar_state == (ruby_vm_global_cvar_state)) {
15799 VALUE v = ((VALUE)RUBY_Qundef);
15800 ((void)0);
15801 if (rb_st_lookup(((((struct RClass *)(ic->entry->class_value))->ptr)->iv_tbl), (st_data_t)id, &v) &&
15802 (__builtin_expect(!!(rb_ractor_main_p()), 1))) {
15803 return v;
15804 }
15805 }
15806 cref = vm_get_cref(((((reg_cfp)->ep))));
15807 VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1);
15808 return update_classvariable_cache(iseq, klass, id, ic);
15809}static inline
15810VALUE
15811rb_vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *cfp, ID id, ICVARC ic)
15812{
15813 return vm_getclassvariable(iseq, cfp, id, ic);
15814}
15815static inline void
15816vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, VALUE val, ICVARC ic)
15817{
15818 const rb_cref_t *cref;
15819 if (ic->entry && ic->entry->global_cvar_state == (ruby_vm_global_cvar_state)) {
15820 ((void)0);
15821 rb_class_ivar_set(ic->entry->class_value, id, val);
15822 return;
15823 }
15824 cref = vm_get_cref(((((reg_cfp)->ep))));
15825 VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1);
15826 rb_cvar_set(klass, id, val);
15827 update_classvariable_cache(iseq, klass, id, ic);
15828}static inline
15829void
15830rb_vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *cfp, ID id, VALUE val, ICVARC ic)
15831{
15832 vm_setclassvariable(iseq, cfp, id, val, ic);
15833}
15834static inline VALUE
15835vm_getinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, IVC ic)
15836{
15837 return vm_getivar(obj, id, iseq, ic, ((void *)0), 0);
15838}
15839static inline void
15840vm_setinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, VALUE val, IVC ic)
15841{
15842 vm_setivar(obj, id, val, iseq, ic, 0, 0);
15843}static inline
15844void
15845rb_vm_setinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, VALUE val, IVC ic)
15846{
15847 vm_setinstancevariable(iseq, obj, id, val, ic);
15848}static inline
15849VALUE
15850rb_vm_set_ivar_idx(VALUE obj, uint32_t index, VALUE val)
15851{
15852 ((void)0);
15853 do { VALUE frozen_obj = (obj); if ((__builtin_expect(!!(RB_OBJ_FROZEN(frozen_obj)), 0))) { rb_error_frozen_object(frozen_obj); } } while (0);
15854 ((void)0);
15855 if ((__builtin_expect(!!(index >= ROBJECT_NUMIV(obj)), 0))) {
15856 rb_init_iv_list(obj);
15857 }
15858 VALUE *ptr = ROBJECT_IVPTR(obj);
15859 rb_obj_write((VALUE)(obj), __extension__({
15860 ;
15861 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
15862 ; unaligned_member_access_result; }), (VALUE)(val), "./vm_insnhelper.c", 1403);
15863 return val;
15864}
15865static VALUE
15866vm_throw_continue(const rb_execution_context_t *ec, VALUE err)
15867{
15868 if (RB_FIXNUM_P(err)) {
15869 ec->tag->state = RB_FIX2INT(err);
15870 }
15871 else if (RB_SYMBOL_P(err)) {
15872 ec->tag->state = RUBY_TAG_THROW;
15873 }
15874 else if (imemo_throw_data_p((VALUE)err)) {
15875 ec->tag->state = THROW_DATA_STATE((struct vm_throw_data *)err);
15876 }
15877 else {
15878 ec->tag->state = RUBY_TAG_RAISE;
15879 }
15880 return err;
15881}
15882static VALUE
15883vm_throw_start(const rb_execution_context_t *ec, rb_control_frame_t *const reg_cfp, enum ruby_tag_type state,
15884 const int flag, const VALUE throwobj)
15885{
15886 const rb_control_frame_t *escape_cfp = ((void *)0);
15887 const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec);
15888 if (flag != 0) {
15889 }
15890 else if (state == RUBY_TAG_BREAK) {
15891 int is_orphan = 1;
15892 const VALUE *ep = ((((reg_cfp)->ep)));
15893 const rb_iseq_t *base_iseq = ((((reg_cfp)))->iseq);
15894 escape_cfp = reg_cfp;
15895 while (base_iseq->body->type != ISEQ_TYPE_BLOCK) {
15896 if (escape_cfp->iseq->body->type == ISEQ_TYPE_CLASS) {
15897 escape_cfp = ((escape_cfp)+1);
15898 ep = escape_cfp->ep;
15899 base_iseq = escape_cfp->iseq;
15900 }
15901 else {
15902 ep = VM_ENV_PREV_EP(ep);
15903 base_iseq = base_iseq->body->parent_iseq;
15904 escape_cfp = rb_vm_search_cf_from_ep(ec, escape_cfp, ep);
15905 ((void)0);
15906 }
15907 }
15908 if (VM_FRAME_LAMBDA_P(escape_cfp)) {
15909 is_orphan = 0;
15910 state = RUBY_TAG_RETURN;
15911 }
15912 else {
15913 ep = VM_ENV_PREV_EP(ep);
15914 while (escape_cfp < eocfp) {
15915 if (escape_cfp->ep == ep) {
15916 const rb_iseq_t *const iseq = escape_cfp->iseq;
15917 const VALUE epc = escape_cfp->pc - iseq->body->iseq_encoded;
15918 const struct iseq_catch_table *const ct = iseq->body->catch_table;
15919 unsigned int i;
15920 if (!ct) break;
15921 for (i=0; i < ct->size; i++) {
15922 const struct iseq_catch_table_entry *const entry =
15923 __extension__({
15924 ;
15925 ; __typeof__(&(ct)->entries[i]) unaligned_member_access_result = (&(ct)->entries[i]);
15926 ; unaligned_member_access_result; });
15927 if (entry->type == CATCH_TYPE_BREAK &&
15928 entry->iseq == base_iseq &&
15929 entry->start < epc && entry->end >= epc) {
15930 if (entry->cont == epc) {
15931 is_orphan = 0;
15932 }
15933 break;
15934 }
15935 }
15936 break;
15937 }
15938 escape_cfp = ((escape_cfp)+1);
15939 }
15940 }
15941 if (is_orphan) {
15942 rb_vm_localjump_error("break from proc-closure", throwobj, RUBY_TAG_BREAK);
15943 }
15944 }
15945 else if (state == RUBY_TAG_RETRY) {
15946 const VALUE *ep = VM_ENV_PREV_EP(((((reg_cfp)->ep))));
15947 escape_cfp = rb_vm_search_cf_from_ep(ec, reg_cfp, ep);
15948 }
15949 else if (state == RUBY_TAG_RETURN) {
15950 const VALUE *current_ep = ((((reg_cfp)->ep)));
15951 const VALUE *target_ep = ((void *)0), *target_lep, *ep = current_ep;
15952 int in_class_frame = 0;
15953 int toplevel = 1;
15954 escape_cfp = reg_cfp;
15955 while (!VM_ENV_LOCAL_P(ep)) {
15956 if (VM_ENV_FLAGS(ep, VM_FRAME_FLAG_LAMBDA) && target_ep == ((void *)0)) {
15957 target_ep = ep;
15958 }
15959 ep = VM_ENV_PREV_EP(ep);
15960 }
15961 target_lep = ep;
15962 while (escape_cfp < eocfp) {
15963 const VALUE *lep = VM_CF_LEP(escape_cfp);
15964 if (!target_lep) {
15965 target_lep = lep;
15966 }
15967 if (lep == target_lep &&
15968 VM_FRAME_RUBYFRAME_P(escape_cfp) &&
15969 escape_cfp->iseq->body->type == ISEQ_TYPE_CLASS) {
15970 in_class_frame = 1;
15971 target_lep = 0;
15972 }
15973 if (lep == target_lep) {
15974 if (VM_FRAME_LAMBDA_P(escape_cfp)) {
15975 toplevel = 0;
15976 if (in_class_frame) {
15977 goto valid_return;
15978 }
15979 else {
15980 const VALUE *tep = current_ep;
15981 while (target_lep != tep) {
15982 if (escape_cfp->ep == tep) {
15983 if (tep == target_ep) {
15984 goto valid_return;
15985 }
15986 else {
15987 goto unexpected_return;
15988 }
15989 }
15990 tep = VM_ENV_PREV_EP(tep);
15991 }
15992 }
15993 }
15994 else if (VM_FRAME_RUBYFRAME_P(escape_cfp)) {
15995 switch (escape_cfp->iseq->body->type) {
15996 case ISEQ_TYPE_TOP:
15997 case ISEQ_TYPE_MAIN:
15998 if (toplevel) {
15999 if (in_class_frame) goto unexpected_return;
16000 if (target_ep == ((void *)0)) {
16001 goto valid_return;
16002 }
16003 else {
16004 goto unexpected_return;
16005 }
16006 }
16007 break;
16008 case ISEQ_TYPE_EVAL:
16009 case ISEQ_TYPE_CLASS:
16010 toplevel = 0;
16011 break;
16012 default:
16013 break;
16014 }
16015 }
16016 }
16017 if (escape_cfp->ep == target_lep && escape_cfp->iseq->body->type == ISEQ_TYPE_METHOD) {
16018 if (target_ep == ((void *)0)) {
16019 goto valid_return;
16020 }
16021 else {
16022 goto unexpected_return;
16023 }
16024 }
16025 escape_cfp = ((escape_cfp)+1);
16026 }
16027 unexpected_return:;
16028 rb_vm_localjump_error("unexpected return", throwobj, RUBY_TAG_RETURN);
16029 valid_return:;
16030 }
16031 else {
16032 rb_bug("isns(throw): unsupported throw type");
16033 }
16034 ec->tag->state = state;
16035 return (VALUE)THROW_DATA_NEW(throwobj, escape_cfp, state);
16036}
16037static VALUE
16038vm_throw(const rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16039 rb_num_t throw_state, VALUE throwobj)
16040{
16041 const int state = (int)(throw_state & VM_THROW_STATE_MASK);
16042 const int flag = (int)(throw_state & VM_THROW_NO_ESCAPE_FLAG);
16043 if (state != 0) {
16044 return vm_throw_start(ec, reg_cfp, state, flag, throwobj);
16045 }
16046 else {
16047 return vm_throw_continue(ec, throwobj);
16048 }
16049}
16050static inline void
16051vm_expandarray(VALUE *sp, VALUE ary, rb_num_t num, int flag)
16052{
16053 int is_splat = flag & 0x01;
16054 rb_num_t space_size = num + is_splat;
16055 VALUE *base = sp - 1;
16056 const VALUE *ptr;
16057 rb_num_t len;
16058 const VALUE obj = ary;
16059 if (!RB_TYPE_P(ary, RUBY_T_ARRAY) && RB_NIL_P(ary = rb_check_array_type(ary))) {
16060 ary = obj;
16061 ptr = &ary;
16062 len = 1;
16063 }
16064 else {
16065 ptr = rb_array_const_ptr_transient(ary);
16066 len = (rb_num_t)rb_array_len(ary);
16067 }
16068 if (space_size == 0) {
16069 }
16070 else if (flag & 0x02) {
16071 rb_num_t i = 0, j;
16072 if (len < num) {
16073 for (i=0; i<num-len; i++) {
16074 *base++ = ((VALUE)RUBY_Qnil);
16075 }
16076 }
16077 for (j=0; i<num; i++, j++) {
16078 VALUE v = ptr[len - j - 1];
16079 *base++ = v;
16080 }
16081 if (is_splat) {
16082 *base = rb_ary_new_from_values(len - j, ptr);
16083 }
16084 }
16085 else {
16086 rb_num_t i;
16087 VALUE *bptr = &base[space_size - 1];
16088 for (i=0; i<num; i++) {
16089 if (len <= i) {
16090 for (; i<num; i++) {
16091 *bptr-- = ((VALUE)RUBY_Qnil);
16092 }
16093 break;
16094 }
16095 *bptr-- = ptr[i];
16096 }
16097 if (is_splat) {
16098 if (num > len) {
16099 *bptr = rb_ary_new();
16100 }
16101 else {
16102 *bptr = rb_ary_new_from_values(len - num, ptr + num);
16103 }
16104 }
16105 }
16106 (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(ary); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }));
16107}
16108static VALUE vm_call_general(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
16109static VALUE vm_mtbl_dump(VALUE klass, ID target_mid);
16110static struct rb_class_cc_entries *
16111vm_ccs_create(VALUE klass, const rb_callable_method_entry_t *cme)
16112{
16113 struct rb_class_cc_entries *ccs = ((struct rb_class_cc_entries *)ruby_xmalloc(sizeof(struct rb_class_cc_entries)));
16114 ccs->capa = 0;
16115 ccs->len = 0;
16116 rb_obj_write((VALUE)(klass), __extension__({
16117 ;
16118 ; __typeof__((VALUE *)(&ccs->cme)) unaligned_member_access_result = ((VALUE *)(&ccs->cme));
16119 ; unaligned_member_access_result; }), (VALUE)(cme), "./vm_insnhelper.c", 1700);
16120 (((rb_callable_method_entry_t *)cme)->flags |= ((VALUE)RUBY_FL_USER8));
16121 ccs->entries = ((void *)0);
16122 return ccs;
16123}
16124static void
16125vm_ccs_push(VALUE klass, struct rb_class_cc_entries *ccs, const struct rb_callinfo *ci, const struct rb_callcache *cc)
16126{
16127 if (! vm_cc_markable(cc)) {
16128 return;
16129 }
16130 else if (! vm_ci_markable(ci)) {
16131 return;
16132 }
16133 if ((__builtin_expect(!!(ccs->len == ccs->capa), 0))) {
16134 if (ccs->capa == 0) {
16135 ccs->capa = 1;
16136 ccs->entries = ((struct rb_class_cc_entries_entry *)ruby_xmalloc2((ccs->capa), sizeof(struct rb_class_cc_entries_entry)));
16137 }
16138 else {
16139 ccs->capa *= 2;
16140 ((ccs->entries) = ((struct rb_class_cc_entries_entry *)ruby_xrealloc2((void *)(ccs->entries), (ccs->capa), sizeof(struct rb_class_cc_entries_entry))));
16141 }
16142 }
16143 ((void)0);
16144 const int pos = ccs->len++;
16145 rb_obj_write((VALUE)(klass), __extension__({
16146 ;
16147 ; __typeof__((VALUE *)(&ccs->entries[pos].ci)) unaligned_member_access_result = ((VALUE *)(&ccs->entries[pos].ci));
16148 ; unaligned_member_access_result; }), (VALUE)(ci), "./vm_insnhelper.c", 1729);
16149 rb_obj_write((VALUE)(klass), __extension__({
16150 ;
16151 ; __typeof__((VALUE *)(&ccs->entries[pos].cc)) unaligned_member_access_result = ((VALUE *)(&ccs->entries[pos].cc));
16152 ; unaligned_member_access_result; }), (VALUE)(cc), "./vm_insnhelper.c", 1730);
16153 if (0) {
16154 }
16155}
16156static const struct rb_callcache *
16157vm_search_method_slowpath0(VALUE cd_owner, struct rb_call_data *cd, VALUE klass)
16158{
16159 const struct rb_callcache *cc = rb_vm_search_method_slowpath(cd->ci, klass);
16160 cd->cc = cc;
16161 const struct rb_callcache *empty_cc =
16162 rb_vm_empty_cc();
16163 if (cd_owner && cc != empty_cc) (rb_obj_written((VALUE)(cd_owner), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(cc), "./vm_insnhelper.c", 1912));
16164 ((void)0);
16165 return cc;
16166}
16167static const struct rb_callcache *
16168vm_search_method_fastpath(VALUE cd_owner, struct rb_call_data *cd, VALUE klass)
16169{
16170 const struct rb_callcache *cc = cd->cc;
16171 if ((__builtin_expect(!!(vm_cc_class_check(cc, klass)), 1))) {
16172 if ((__builtin_expect(!!(!((vm_cc_cme(cc))->flags & ((VALUE)RUBY_FL_USER9))), 1))) {
16173 ((void)0);
16174 ((void)0);
16175 ((void)0);
16176 return cc;
16177 }
16178 ((void)0);
16179 }
16180 else {
16181 ((void)0);
16182 }
16183 return vm_search_method_slowpath0(cd_owner, cd, klass);
16184}
16185static const struct rb_callcache *
16186vm_search_method(VALUE cd_owner, struct rb_call_data *cd, VALUE recv)
16187{
16188 VALUE klass = rb_class_of(recv);
16189 ((void)0);
16190 ((void)0);
16191 return vm_search_method_fastpath(cd_owner, cd, klass);
16192}
16193static inline int
16194check_cfunc(const rb_callable_method_entry_t *me, VALUE (*func)())
16195{
16196 if (! me) {
16197 return 0;
16198 }
16199 else {
16200 ((void)0);
16201 ((void)0);
16202 ((void)0);
16203 if (me->def->type != VM_METHOD_TYPE_CFUNC) {
16204 return 0;
16205 }
16206 else {
16207 return me->def->body.cfunc.func == func;
16208 }
16209 }
16210}
16211static inline int
16212vm_method_cfunc_is(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv, VALUE (*func)())
16213{
16214 ((void)0);
16215 const struct rb_callcache *cc = vm_search_method((VALUE)iseq, cd, recv);
16216 return check_cfunc(vm_cc_cme(cc), func);
16217}
16218static inline _Bool
16219FIXNUM_2_P(VALUE a, VALUE b)
16220{
16221 long x = a;
16222 long y = b;
16223 long z = x & y & 1;
16224 return z == 1;
16225}
16226static inline _Bool
16227FLONUM_2_P(VALUE a, VALUE b)
16228{
16229 long x = a;
16230 long y = b;
16231 long z = ((x ^ 2) | (y ^ 2)) & 3;
16232 return !z;
16233}
16234static VALUE
16235opt_equality_specialized(VALUE recv, VALUE obj)
16236{
16237 if (FIXNUM_2_P(recv, obj) && ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQ)]&((1 << 0))) == 0), 1)))) {
16238 goto compare_by_identity;
16239 }
16240 else if (FLONUM_2_P(recv, obj) && ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQ)]&((1 << 1))) == 0), 1)))) {
16241 goto compare_by_identity;
16242 }
16243 else if (RB_STATIC_SYM_P(recv) && RB_STATIC_SYM_P(obj) && ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQ)]&((1 << 6))) == 0), 1)))) {
16244 goto compare_by_identity;
16245 }
16246 else if (RB_SPECIAL_CONST_P(recv)) {
16247 }
16248 else if (RBASIC_CLASS(recv) == rb_cFloat && RB_FLOAT_TYPE_P(obj) && ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQ)]&((1 << 1))) == 0), 1)))) {
16249 double a = rb_float_value_inline(recv);
16250 double b = rb_float_value_inline(obj);
16251 return ((a == b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
16252 }
16253 else if (RBASIC_CLASS(recv) == rb_cString && ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQ)]&((1 << 2))) == 0), 1)))) {
16254 if (recv == obj) {
16255 return ((VALUE)RUBY_Qtrue);
16256 }
16257 else if (RB_TYPE_P(obj, RUBY_T_STRING)) {
16258 return rb_str_eql_internal(obj, recv);
16259 }
16260 }
16261 return ((VALUE)RUBY_Qundef);
16262 compare_by_identity:
16263 return ((recv == obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
16264}
16265static VALUE
16266opt_equality(const rb_iseq_t *cd_owner, VALUE recv, VALUE obj, CALL_DATA cd)
16267{
16268 ((void)0);
16269 VALUE val = opt_equality_specialized(recv, obj);
16270 if (val != ((VALUE)RUBY_Qundef)) return val;
16271 if (!vm_method_cfunc_is(cd_owner, cd, recv, rb_obj_equal)) {
16272 return ((VALUE)RUBY_Qundef);
16273 }
16274 else {
16275 return ((recv == obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
16276 }
16277}
16278extern VALUE rb_vm_call0(rb_execution_context_t *ec, VALUE, ID, int, const VALUE*, const rb_callable_method_entry_t *, int kw_splat);
16279extern VALUE rb_vm_call_with_refinements(rb_execution_context_t *, VALUE, ID, int, const VALUE *, int);
16280static VALUE
16281check_match(rb_execution_context_t *ec, VALUE pattern, VALUE target, enum vm_check_match_type type)
16282{
16283 switch (type) {
16284 case VM_CHECKMATCH_TYPE_WHEN:
16285 return pattern;
16286 case VM_CHECKMATCH_TYPE_RESCUE:
16287 if (!rb_obj_is_kind_of(pattern, rb_cModule)) {
16288 rb_raise(rb_eTypeError, "class or module required for rescue clause");
16289 }
16290 case VM_CHECKMATCH_TYPE_CASE: {
16291 return rb_vm_call_with_refinements(ec, pattern, idEqq, 1, &target, 0);
16292 }
16293 default:
16294 rb_bug("check_match: unreachable");
16295 }
16296}
16297static inline VALUE
16298double_cmp_lt(double a, double b)
16299{
16300 ;
16301 return ((a < b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
16302}
16303static inline VALUE
16304double_cmp_le(double a, double b)
16305{
16306 ;
16307 return ((a <= b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
16308}
16309static inline VALUE
16310double_cmp_gt(double a, double b)
16311{
16312 ;
16313 return ((a > b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
16314}
16315static inline VALUE
16316double_cmp_ge(double a, double b)
16317{
16318 ;
16319 return ((a >= b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
16320}
16321static inline VALUE *
16322vm_base_ptr(const rb_control_frame_t *cfp)
16323{
16324 return cfp->__bp__;
16325}
16326__attribute__((__noreturn__)) static void raise_argument_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const VALUE exc);
16327__attribute__((__noreturn__)) static void argument_arity_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const int miss_argc, const int min_argc, const int max_argc);
16328__attribute__((__noreturn__)) static void argument_kw_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const char *error, const VALUE keys);
16329VALUE rb_keyword_error_new(const char *error, VALUE keys);
16330static VALUE method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv,
16331 enum method_missing_reason call_status, int kw_splat);
16332__attribute__ ((__visibility__("default"))) extern
16333const rb_callable_method_entry_t *rb_resolve_refined_method_callable(VALUE refinements, const rb_callable_method_entry_t *me);
16334struct args_info {
16335 VALUE *argv;
16336 int argc;
16337 int rest_index;
16338 int rest_dupped;
16339 const struct rb_callinfo_kwarg *kw_arg;
16340 VALUE *kw_argv;
16341 VALUE rest;
16342};
16343enum arg_setup_type {
16344 arg_setup_method,
16345 arg_setup_block
16346};
16347static inline void
16348arg_rest_dup(struct args_info *args)
16349{
16350 if (!args->rest_dupped) {
16351 args->rest = rb_ary_dup(args->rest);
16352 args->rest_dupped = 1;
16353 }
16354}
16355static inline int
16356args_argc(struct args_info *args)
16357{
16358 if (args->rest == ((VALUE)RUBY_Qfalse)) {
16359 return args->argc;
16360 }
16361 else {
16362 return args->argc + RARRAY_LENINT(args->rest) - args->rest_index;
16363 }
16364}
16365static inline void
16366args_extend(struct args_info *args, const int min_argc)
16367{
16368 int i;
16369 if (args->rest) {
16370 arg_rest_dup(args);
16371 ((void)0);
16372 for (i=args->argc + RARRAY_LENINT(args->rest); i<min_argc; i++) {
16373 rb_ary_push(args->rest, ((VALUE)RUBY_Qnil));
16374 }
16375 }
16376 else {
16377 for (i=args->argc; i<min_argc; i++) {
16378 args->argv[args->argc++] = ((VALUE)RUBY_Qnil);
16379 }
16380 }
16381}
16382static inline void
16383args_reduce(struct args_info *args, int over_argc)
16384{
16385 if (args->rest) {
16386 const long len = rb_array_len(args->rest);
16387 if (len > over_argc) {
16388 arg_rest_dup(args);
16389 rb_ary_resize(args->rest, len - over_argc);
16390 return;
16391 }
16392 else {
16393 args->rest = ((VALUE)RUBY_Qfalse);
16394 over_argc -= len;
16395 }
16396 }
16397 ((void)0);
16398 args->argc -= over_argc;
16399}
16400static inline int
16401args_check_block_arg0(struct args_info *args)
16402{
16403 VALUE ary = ((VALUE)RUBY_Qnil);
16404 if (args->rest && rb_array_len(args->rest) == 1) {
16405 VALUE arg0 = RARRAY_AREF(args->rest, 0);
16406 ary = rb_check_array_type(arg0);
16407 }
16408 else if (args->argc == 1) {
16409 VALUE arg0 = args->argv[0];
16410 ary = rb_check_array_type(arg0);
16411 args->argv[0] = arg0;
16412 }
16413 if (!RB_NIL_P(ary)) {
16414 args->rest = ary;
16415 args->rest_index = 0;
16416 args->argc = 0;
16417 return 1;
16418 }
16419 return 0;
16420}
16421static inline void
16422args_copy(struct args_info *args)
16423{
16424 if (args->rest != ((VALUE)RUBY_Qfalse)) {
16425 int argc = args->argc;
16426 args->argc = 0;
16427 arg_rest_dup(args);
16428 while (args->rest_index > 0 && argc > 0) {
16429 RARRAY_ASET(args->rest, --args->rest_index, args->argv[--argc]);
16430 }
16431 while (argc > 0) {
16432 rb_ary_unshift(args->rest, args->argv[--argc]);
16433 }
16434 }
16435 else if (args->argc > 0) {
16436 args->rest = rb_ary_new_from_values(args->argc, args->argv);
16437 args->rest_index = 0;
16438 args->rest_dupped = 1;
16439 args->argc = 0;
16440 }
16441}
16442static inline const VALUE *
16443args_rest_argv(struct args_info *args)
16444{
16445 return rb_array_const_ptr_transient(args->rest) + args->rest_index;
16446}
16447static inline VALUE
16448args_rest_array(struct args_info *args)
16449{
16450 VALUE ary;
16451 if (args->rest) {
16452 ary = rb_ary_behead(args->rest, args->rest_index);
16453 args->rest_index = 0;
16454 args->rest = 0;
16455 }
16456 else {
16457 ary = rb_ary_new();
16458 }
16459 return ary;
16460}
16461static int
16462args_kw_argv_to_hash(struct args_info *args)
16463{
16464 const struct rb_callinfo_kwarg *kw_arg = args->kw_arg;
16465 const VALUE *const passed_keywords = kw_arg->keywords;
16466 const int kw_len = kw_arg->keyword_len;
16467 VALUE h = rb_hash_new_with_size(kw_len);
16468 const int kw_start = args->argc - kw_len;
16469 const VALUE * const kw_argv = args->argv + kw_start;
16470 int i;
16471 args->argc = kw_start + 1;
16472 for (i=0; i<kw_len; i++) {
16473 rb_hash_aset(h, passed_keywords[i], kw_argv[i]);
16474 }
16475 args->argv[args->argc - 1] = h;
16476 return args->argc;
16477}
16478static inline void
16479args_setup_lead_parameters(struct args_info *args, int argc, VALUE *locals)
16480{
16481 if (args->argc >= argc) {
16482 args->argc -= argc;
16483 args->argv += argc;
16484 }
16485 else {
16486 int i, j;
16487 const VALUE *argv = args_rest_argv(args);
16488 for (i=args->argc, j=0; i<argc; i++, j++) {
16489 locals[i] = argv[j];
16490 }
16491 args->rest_index += argc - args->argc;
16492 args->argc = 0;
16493 }
16494}
16495static inline void
16496args_setup_post_parameters(struct args_info *args, int argc, VALUE *locals)
16497{
16498 long len;
16499 len = rb_array_len(args->rest);
16500 ruby_nonempty_memcpy((locals), (rb_array_const_ptr_transient(args->rest) + len - argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
16501 rb_ary_resize(args->rest, len - argc);
16502}
16503static inline int
16504args_setup_opt_parameters(struct args_info *args, int opt_max, VALUE *locals)
16505{
16506 int i;
16507 if (args->argc >= opt_max) {
16508 args->argc -= opt_max;
16509 args->argv += opt_max;
16510 i = opt_max;
16511 }
16512 else {
16513 int j;
16514 i = args->argc;
16515 args->argc = 0;
16516 if (args->rest) {
16517 int len = RARRAY_LENINT(args->rest);
16518 const VALUE *argv = rb_array_const_ptr_transient(args->rest);
16519 for (; i<opt_max && args->rest_index < len; i++, args->rest_index++) {
16520 locals[i] = argv[args->rest_index];
16521 }
16522 }
16523 for (j=i; j<opt_max; j++) {
16524 locals[j] = ((VALUE)RUBY_Qnil);
16525 }
16526 }
16527 return i;
16528}
16529static inline void
16530args_setup_rest_parameter(struct args_info *args, VALUE *locals)
16531{
16532 *locals = args_rest_array(args);
16533}
16534static VALUE
16535make_unknown_kw_hash(const VALUE *passed_keywords, int passed_keyword_len, const VALUE *kw_argv)
16536{
16537 int i;
16538 VALUE obj = rb_ary_tmp_new(1);
16539 for (i=0; i<passed_keyword_len; i++) {
16540 if (kw_argv[i] != ((VALUE)RUBY_Qundef)) {
16541 rb_ary_push(obj, passed_keywords[i]);
16542 }
16543 }
16544 return obj;
16545}
16546static VALUE
16547make_rest_kw_hash(const VALUE *passed_keywords, int passed_keyword_len, const VALUE *kw_argv)
16548{
16549 int i;
16550 VALUE obj = rb_hash_new_with_size(passed_keyword_len);
16551 for (i=0; i<passed_keyword_len; i++) {
16552 if (kw_argv[i] != ((VALUE)RUBY_Qundef)) {
16553 rb_hash_aset(obj, passed_keywords[i], kw_argv[i]);
16554 }
16555 }
16556 return obj;
16557}
16558static inline int
16559args_setup_kw_parameters_lookup(const ID key, VALUE *ptr, const VALUE *const passed_keywords, VALUE *passed_values, const int passed_keyword_len)
16560{
16561 int i;
16562 const VALUE keyname = rb_id2sym(key);
16563 for (i=0; i<passed_keyword_len; i++) {
16564 if (keyname == passed_keywords[i]) {
16565 *ptr = passed_values[i];
16566 passed_values[i] = ((VALUE)RUBY_Qundef);
16567 return 1;
16568 }
16569 }
16570 return 0;
16571}
16572static void
16573args_setup_kw_parameters(rb_execution_context_t *const ec, const rb_iseq_t *const iseq,
16574 VALUE *const passed_values, const int passed_keyword_len, const VALUE *const passed_keywords,
16575 VALUE *const locals)
16576{
16577 const ID *acceptable_keywords = iseq->body->param.keyword->table;
16578 const int req_key_num = iseq->body->param.keyword->required_num;
16579 const int key_num = iseq->body->param.keyword->num;
16580 const VALUE * const default_values = iseq->body->param.keyword->default_values;
16581 VALUE missing = 0;
16582 int i, di, found = 0;
16583 int unspecified_bits = 0;
16584 VALUE unspecified_bits_value = ((VALUE)RUBY_Qnil);
16585 for (i=0; i<req_key_num; i++) {
16586 ID key = acceptable_keywords[i];
16587 if (args_setup_kw_parameters_lookup(key, &locals[i], passed_keywords, passed_values, passed_keyword_len)) {
16588 found++;
16589 }
16590 else {
16591 if (!missing) missing = rb_ary_tmp_new(1);
16592 rb_ary_push(missing, rb_id2sym(key));
16593 }
16594 }
16595 if (missing) argument_kw_error(ec, iseq, "missing", missing);
16596 for (di=0; i<key_num; i++, di++) {
16597 if (args_setup_kw_parameters_lookup(acceptable_keywords[i], &locals[i], passed_keywords, passed_values, passed_keyword_len)) {
16598 found++;
16599 }
16600 else {
16601 if (default_values[di] == ((VALUE)RUBY_Qundef)) {
16602 locals[i] = ((VALUE)RUBY_Qnil);
16603 if ((__builtin_expect(!!(i < (32-1)), 1))) {
16604 unspecified_bits |= 0x01 << di;
16605 }
16606 else {
16607 if (RB_NIL_P(unspecified_bits_value)) {
16608 int j;
16609 unspecified_bits_value = rb_hash_new();
16610 for (j=0; j<(32-1); j++) {
16611 if (unspecified_bits & (0x01 << j)) {
16612 rb_hash_aset(unspecified_bits_value, __builtin_choose_expr( __builtin_constant_p(j), ((VALUE)(j)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(j)), ((VALUE)RUBY_Qtrue));
16613 }
16614 }
16615 }
16616 rb_hash_aset(unspecified_bits_value, __builtin_choose_expr( __builtin_constant_p(di), ((VALUE)(di)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(di)), ((VALUE)RUBY_Qtrue));
16617 }
16618 }
16619 else {
16620 locals[i] = default_values[di];
16621 }
16622 }
16623 }
16624 if (iseq->body->param.flags.has_kwrest) {
16625 const int rest_hash_index = key_num + 1;
16626 locals[rest_hash_index] = make_rest_kw_hash(passed_keywords, passed_keyword_len, passed_values);
16627 }
16628 else {
16629 if (found != passed_keyword_len) {
16630 VALUE keys = make_unknown_kw_hash(passed_keywords, passed_keyword_len, passed_values);
16631 argument_kw_error(ec, iseq, "unknown", keys);
16632 }
16633 }
16634 if (RB_NIL_P(unspecified_bits_value)) {
16635 unspecified_bits_value = __builtin_choose_expr( __builtin_constant_p(unspecified_bits), ((VALUE)(unspecified_bits)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(unspecified_bits));
16636 }
16637 locals[key_num] = unspecified_bits_value;
16638}
16639static inline void
16640args_setup_kw_rest_parameter(VALUE keyword_hash, VALUE *locals, int kw_flag)
16641{
16642 if (RB_NIL_P(keyword_hash)) {
16643 keyword_hash = rb_hash_new();
16644 }
16645 else if (!(kw_flag & (0x01 << VM_CALL_KW_SPLAT_MUT_bit))) {
16646 keyword_hash = rb_hash_dup(keyword_hash);
16647 }
16648 locals[0] = keyword_hash;
16649}
16650static inline void
16651args_setup_block_parameter(const rb_execution_context_t *ec, struct rb_calling_info *calling, VALUE *locals)
16652{
16653 VALUE block_handler = calling->block_handler;
16654 *locals = rb_vm_bh_to_procval(ec, block_handler);
16655}
16656struct fill_values_arg {
16657 VALUE *keys;
16658 VALUE *vals;
16659 int argc;
16660};
16661static int
16662fill_keys_values(st_data_t key, st_data_t val, st_data_t ptr)
16663{
16664 struct fill_values_arg *arg = (struct fill_values_arg *)ptr;
16665 int i = arg->argc++;
16666 arg->keys[i] = (VALUE)key;
16667 arg->vals[i] = (VALUE)val;
16668 return ST_CONTINUE;
16669}
16670static inline int
16671ignore_keyword_hash_p(VALUE keyword_hash, const rb_iseq_t * const iseq, unsigned int * kw_flag, VALUE * converted_keyword_hash)
16672{
16673 if (!RB_TYPE_P(keyword_hash, RUBY_T_HASH)) {
16674 keyword_hash = rb_to_hash_type(keyword_hash);
16675 }
16676 if (!(*kw_flag & (0x01 << VM_CALL_KW_SPLAT_MUT_bit)) &&
16677 (iseq->body->param.flags.has_kwrest ||
16678 iseq->body->param.flags.ruby2_keywords)) {
16679 *kw_flag |= (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
16680 keyword_hash = rb_hash_dup(keyword_hash);
16681 }
16682 *converted_keyword_hash = keyword_hash;
16683 return !(iseq->body->param.flags.has_kw) &&
16684 !(iseq->body->param.flags.has_kwrest) &&
16685 RHASH_EMPTY_P(keyword_hash);
16686}
16687COLDFUNC static int
16688setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * const iseq,
16689 struct rb_calling_info *const calling,
16690 const struct rb_callinfo *ci,
16691 VALUE * const locals, const enum arg_setup_type arg_setup_type) {
16692 const int min_argc = iseq->body->param.lead_num + iseq->body->param.post_num;
16693 const int max_argc = (iseq->body->param.flags.has_rest == 0) ? min_argc + iseq->body->param.opt_num : (-1);
16694 int given_argc;
16695 unsigned int kw_flag = vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
16696 int opt_pc = 0, allow_autosplat = !kw_flag;
16697 struct args_info args_body, *args;
16698 VALUE keyword_hash = ((VALUE)RUBY_Qnil);
16699 VALUE * const orig_sp = ec->cfp->sp;
16700 unsigned int i;
16701 VALUE flag_keyword_hash = 0;
16702 VALUE converted_keyword_hash = 0;
16703 ;
16704 for (i=calling->argc; i<iseq->body->param.size; i++) {
16705 locals[i] = ((VALUE)RUBY_Qnil);
16706 }
16707 ec->cfp->sp = &locals[i];
16708 args = &args_body;
16709 given_argc = args->argc = calling->argc;
16710 args->argv = locals;
16711 args->rest_dupped = 0;
16712 if (kw_flag & (0x01 << VM_CALL_KWARG_bit)) {
16713 args->kw_arg = vm_ci_kwarg(ci);
16714 if (iseq->body->param.flags.has_kw) {
16715 int kw_len = args->kw_arg->keyword_len;
16716 args->kw_argv = ((VALUE *)__builtin_alloca (rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len))));
16717 args->argc -= kw_len;
16718 given_argc -= kw_len;
16719 ruby_nonempty_memcpy((args->kw_argv), (locals + args->argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len)));
16720 }
16721 else {
16722 args->kw_argv = ((void *)0);
16723 given_argc = args_kw_argv_to_hash(args);
16724 kw_flag |= (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
16725 }
16726 }
16727 else {
16728 args->kw_arg = ((void *)0);
16729 args->kw_argv = ((void *)0);
16730 }
16731 if (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) {
16732 VALUE rest_last = 0;
16733 int len;
16734 args->rest = locals[--args->argc];
16735 args->rest_index = 0;
16736 len = RARRAY_LENINT(args->rest);
16737 given_argc += len - 1;
16738 rest_last = RARRAY_AREF(args->rest, len - 1);
16739 if (!kw_flag && len > 0) {
16740 if (RB_TYPE_P(rest_last, RUBY_T_HASH) &&
16741 (((struct RHash *)rest_last)->basic.flags & RHASH_PASS_AS_KEYWORDS)) {
16742 rest_last = rb_hash_dup(rest_last);
16743 kw_flag |= (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
16744 }
16745 else {
16746 rest_last = 0;
16747 }
16748 }
16749 if (kw_flag & (0x01 << VM_CALL_KW_SPLAT_bit)) {
16750 if (ignore_keyword_hash_p(rest_last, iseq, &kw_flag, &converted_keyword_hash)) {
16751 arg_rest_dup(args);
16752 rb_ary_pop(args->rest);
16753 given_argc--;
16754 kw_flag &= ~((0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
16755 }
16756 else {
16757 if (rest_last != converted_keyword_hash) {
16758 rest_last = converted_keyword_hash;
16759 arg_rest_dup(args);
16760 RARRAY_ASET(args->rest, len - 1, rest_last);
16761 }
16762 if (iseq->body->param.flags.ruby2_keywords && rest_last) {
16763 flag_keyword_hash = rest_last;
16764 }
16765 else if (iseq->body->param.flags.has_kw || iseq->body->param.flags.has_kwrest) {
16766 arg_rest_dup(args);
16767 rb_ary_pop(args->rest);
16768 given_argc--;
16769 keyword_hash = rest_last;
16770 }
16771 }
16772 }
16773 }
16774 else {
16775 if (kw_flag & (0x01 << VM_CALL_KW_SPLAT_bit)) {
16776 VALUE last_arg = args->argv[args->argc-1];
16777 if (ignore_keyword_hash_p(last_arg, iseq, &kw_flag, &converted_keyword_hash)) {
16778 args->argc--;
16779 given_argc--;
16780 kw_flag &= ~((0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
16781 }
16782 else {
16783 if (last_arg != converted_keyword_hash) {
16784 last_arg = converted_keyword_hash;
16785 args->argv[args->argc-1] = last_arg;
16786 }
16787 if (iseq->body->param.flags.ruby2_keywords) {
16788 flag_keyword_hash = last_arg;
16789 }
16790 else if (iseq->body->param.flags.has_kw || iseq->body->param.flags.has_kwrest) {
16791 args->argc--;
16792 given_argc--;
16793 keyword_hash = last_arg;
16794 }
16795 }
16796 }
16797 args->rest = ((VALUE)RUBY_Qfalse);
16798 }
16799 if (flag_keyword_hash && RB_TYPE_P(flag_keyword_hash, RUBY_T_HASH)) {
16800 ((struct RHash *)flag_keyword_hash)->basic.flags |= RHASH_PASS_AS_KEYWORDS;
16801 }
16802 if (kw_flag && iseq->body->param.flags.accepts_no_kwarg) {
16803 rb_raise(rb_eArgError, "no keywords accepted");
16804 }
16805 switch (arg_setup_type) {
16806 case arg_setup_method:
16807 break;
16808 case arg_setup_block:
16809 if (given_argc == (RB_NIL_P(keyword_hash) ? 1 : 2) &&
16810 allow_autosplat &&
16811 (min_argc > 0 || iseq->body->param.opt_num > 1) &&
16812 !iseq->body->param.flags.ambiguous_param0 &&
16813 args_check_block_arg0(args)) {
16814 given_argc = RARRAY_LENINT(args->rest);
16815 }
16816 break;
16817 }
16818 if (given_argc < min_argc) {
16819 if (arg_setup_type == arg_setup_block) {
16820 do { __extension__ _Static_assert(sizeof(*((ec->cfp)->sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*((ec->cfp)->sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*((ec->cfp))) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*((ec->cfp))) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&((ec->cfp)->sp)[((min_argc))]; if ((__builtin_expect(!!(((ec->cfp)) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
16821 given_argc = min_argc;
16822 args_extend(args, min_argc);
16823 }
16824 else {
16825 argument_arity_error(ec, iseq, given_argc, min_argc, max_argc);
16826 }
16827 }
16828 if (given_argc > max_argc && max_argc != (-1)) {
16829 if (arg_setup_type == arg_setup_block) {
16830 args_reduce(args, given_argc - max_argc);
16831 given_argc = max_argc;
16832 }
16833 else {
16834 argument_arity_error(ec, iseq, given_argc, min_argc, max_argc);
16835 }
16836 }
16837 if (iseq->body->param.flags.has_lead) {
16838 args_setup_lead_parameters(args, iseq->body->param.lead_num, locals + 0);
16839 }
16840 if (iseq->body->param.flags.has_rest || iseq->body->param.flags.has_post){
16841 args_copy(args);
16842 }
16843 if (iseq->body->param.flags.has_post) {
16844 args_setup_post_parameters(args, iseq->body->param.post_num, locals + iseq->body->param.post_start);
16845 }
16846 if (iseq->body->param.flags.has_opt) {
16847 int opt = args_setup_opt_parameters(args, iseq->body->param.opt_num, locals + iseq->body->param.lead_num);
16848 opt_pc = (int)iseq->body->param.opt_table[opt];
16849 }
16850 if (iseq->body->param.flags.has_rest) {
16851 args_setup_rest_parameter(args, locals + iseq->body->param.rest_start);
16852 }
16853 if (iseq->body->param.flags.has_kw) {
16854 VALUE * const klocals = locals + iseq->body->param.keyword->bits_start - iseq->body->param.keyword->num;
16855 if (args->kw_argv != ((void *)0)) {
16856 const struct rb_callinfo_kwarg *kw_arg = args->kw_arg;
16857 args_setup_kw_parameters(ec, iseq, args->kw_argv, kw_arg->keyword_len, kw_arg->keywords, klocals);
16858 }
16859 else if (!RB_NIL_P(keyword_hash)) {
16860 int kw_len = rb_long2int_inline(RHASH_SIZE(keyword_hash));
16861 struct fill_values_arg arg;
16862 arg.keys = args->kw_argv = ((VALUE *)__builtin_alloca (rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len * 2))));
16863 arg.vals = arg.keys + kw_len;
16864 arg.argc = 0;
16865 rb_hash_foreach(keyword_hash, fill_keys_values, (VALUE)&arg);
16866 ((void)0);
16867 args_setup_kw_parameters(ec, iseq, arg.vals, kw_len, arg.keys, klocals);
16868 }
16869 else {
16870 ((void)0);
16871 args_setup_kw_parameters(ec, iseq, ((void *)0), 0, ((void *)0), klocals);
16872 }
16873 }
16874 else if (iseq->body->param.flags.has_kwrest) {
16875 args_setup_kw_rest_parameter(keyword_hash, locals + iseq->body->param.keyword->rest_start, kw_flag);
16876 }
16877 else if (!RB_NIL_P(keyword_hash) && RHASH_SIZE(keyword_hash) > 0 && arg_setup_type == arg_setup_method) {
16878 argument_kw_error(ec, iseq, "unknown", rb_hash_keys(keyword_hash));
16879 }
16880 if (iseq->body->param.flags.has_block) {
16881 if (iseq->body->local_iseq == iseq) {
16882 }
16883 else {
16884 args_setup_block_parameter(ec, calling, locals + iseq->body->param.block_start);
16885 }
16886 }
16887 ec->cfp->sp = orig_sp;
16888 return opt_pc;
16889}
16890static void
16891raise_argument_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const VALUE exc)
16892{
16893 VALUE at;
16894 if (iseq) {
16895 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_DUMMY | VM_ENV_FLAG_LOCAL, ((VALUE)RUBY_Qnil) ,
16896 0 , ((VALUE)RUBY_Qfalse) ,
16897 iseq->body->iseq_encoded,
16898 ec->cfp->sp, 0, 0 );
16899 at = rb_ec_backtrace_object(ec);
16900 rb_backtrace_use_iseq_first_lineno_for_last_location(at);
16901 rb_vm_pop_frame(ec);
16902 }
16903 else {
16904 at = rb_ec_backtrace_object(ec);
16905 }
16906 rb_ivar_set(exc, idBt_locations, at);
16907 rb_exc_set_backtrace(exc, at);
16908 rb_exc_raise(exc);
16909}
16910static void
16911argument_arity_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const int miss_argc, const int min_argc, const int max_argc)
16912{
16913 VALUE exc = rb_arity_error_new(miss_argc, min_argc, max_argc);
16914 if (iseq->body->param.flags.has_kw) {
16915 const struct rb_iseq_param_keyword *const kw = iseq->body->param.keyword;
16916 const ID *keywords = kw->table;
16917 int req_key_num = kw->required_num;
16918 if (req_key_num > 0) {
16919 static const char required[] = "; required keywords";
16920 VALUE mesg = rb_attr_get(exc, idMesg);
16921 rb_str_resize(mesg, RSTRING_LEN(mesg)-1);
16922 rb_str_cat(mesg, required, sizeof(required) - 1 - (req_key_num == 1));
16923 ((__builtin_constant_p(":") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (":")));
16924 do {
16925 ((__builtin_constant_p(" ") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (" ")));
16926 rb_str_append(mesg, rb_id2str(*keywords++));
16927 ((__builtin_constant_p(",") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (",")));
16928 } while (--req_key_num);
16929 RSTRING_PTR(mesg)[RSTRING_LEN(mesg)-1] = ')';
16930 }
16931 }
16932 raise_argument_error(ec, iseq, exc);
16933}
16934static void
16935argument_kw_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const char *error, const VALUE keys)
16936{
16937 raise_argument_error(ec, iseq, rb_keyword_error_new(error, keys));
16938}
16939static inline void
16940vm_caller_setup_arg_splat(rb_control_frame_t *cfp, struct rb_calling_info *calling)
16941{
16942 int argc = calling->argc;
16943 VALUE *argv = cfp->sp - argc;
16944 VALUE ary = argv[argc-1];
16945 ;
16946 cfp->sp--;
16947 if (!RB_NIL_P(ary)) {
16948 const VALUE *ptr = rb_array_const_ptr_transient(ary);
16949 long len = rb_array_len(ary), i;
16950 do { __extension__ _Static_assert(sizeof(*((cfp)->sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*((cfp)->sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*((cfp))) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*((cfp))) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&((cfp)->sp)[((len))]; if ((__builtin_expect(!!(((cfp)) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
16951 for (i = 0; i < len; i++) {
16952 *cfp->sp++ = ptr[i];
16953 }
16954 calling->argc += i - 1;
16955 }
16956}
16957static inline void
16958vm_caller_setup_arg_kw(rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_callinfo *ci)
16959{
16960 const VALUE *const passed_keywords = vm_ci_kwarg(ci)->keywords;
16961 const int kw_len = vm_ci_kwarg(ci)->keyword_len;
16962 const VALUE h = rb_hash_new_with_size(kw_len);
16963 VALUE *sp = cfp->sp;
16964 int i;
16965 for (i=0; i<kw_len; i++) {
16966 rb_hash_aset(h, passed_keywords[i], (sp - kw_len)[i]);
16967 }
16968 (sp-kw_len)[0] = h;
16969 cfp->sp -= kw_len - 1;
16970 calling->argc -= kw_len - 1;
16971 calling->kw_splat = 1;
16972}
16973static VALUE
16974vm_to_proc(VALUE proc)
16975{
16976 if ((__builtin_expect(!!(!rb_obj_is_proc(proc)), 0))) {
16977 VALUE b;
16978 const rb_callable_method_entry_t *me =
16979 rb_callable_method_entry_with_refinements(rb_class_of(proc), idTo_proc, ((void *)0));
16980 if (me) {
16981 b = rb_vm_call0(rb_current_execution_context(1), proc, idTo_proc, 0, ((void *)0), me, 0);
16982 }
16983 else {
16984 b = rb_check_convert_type_with_id(proc, RUBY_T_DATA, "Proc", idTo_proc);
16985 }
16986 if (RB_NIL_P(b) || !rb_obj_is_proc(b)) {
16987 rb_raise(rb_eTypeError,
16988 "wrong argument type %s (expected Proc)",
16989 rb_obj_classname(proc));
16990 }
16991 return b;
16992 }
16993 else {
16994 return proc;
16995 }
16996}
16997static VALUE
16998refine_sym_proc_call(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg)
16999{
17000 VALUE obj;
17001 ID mid;
17002 const rb_callable_method_entry_t *me = 0;
17003 rb_execution_context_t *ec;
17004 const VALUE symbol = RARRAY_AREF(callback_arg, 0);
17005 const VALUE refinements = RARRAY_AREF(callback_arg, 1);
17006 int kw_splat = rb_keyword_given_p();
17007 VALUE klass;
17008 if (argc-- < 1) {
17009 rb_raise(rb_eArgError, "no receiver given");
17010 }
17011 obj = *argv++;
17012 mid = rb_sym2id(symbol);
17013 for (klass = rb_class_of(obj); klass; klass = RCLASS_SUPER(klass)) {
17014 me = rb_callable_method_entry(klass, mid);
17015 if (me) {
17016 me = rb_resolve_refined_method_callable(refinements, me);
17017 if (me) break;
17018 }
17019 }
17020 ec = rb_current_execution_context(1);
17021 if (!RB_NIL_P(blockarg)) {
17022 vm_passed_block_handler_set(ec, blockarg);
17023 }
17024 if (!me) {
17025 return method_missing(ec, obj, mid, argc, argv, MISSING_NOENTRY, kw_splat);
17026 }
17027 return rb_vm_call0(ec, obj, mid, argc, argv, me, kw_splat);
17028}
17029static VALUE
17030vm_caller_setup_arg_block(const rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
17031 const struct rb_callinfo *ci, const rb_iseq_t *blockiseq, const int is_super)
17032{
17033 if (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_BLOCKARG_bit)) {
17034 VALUE block_code = *(--reg_cfp->sp);
17035 if (RB_NIL_P(block_code)) {
17036 return 0;
17037 }
17038 else if (block_code == rb_block_param_proxy) {
17039 ((void)0);
17040 VALUE handler = VM_CF_BLOCK_HANDLER(reg_cfp);
17041 reg_cfp->block_code = (const void *) handler;
17042 return handler;
17043 }
17044 else if (RB_SYMBOL_P(block_code) && rb_method_basic_definition_p(rb_cSymbol, idTo_proc)) {
17045 const rb_cref_t *cref = vm_env_cref(reg_cfp->ep);
17046 if (cref && !RB_NIL_P(cref->refinements)) {
17047 VALUE ref = cref->refinements;
17048 VALUE func = rb_hash_lookup(ref, block_code);
17049 if (RB_NIL_P(func)) {
17050 VALUE callback_arg = rb_ary_tmp_new(2);
17051 rb_ary_push(callback_arg, block_code);
17052 rb_ary_push(callback_arg, ref);
17053 RB_OBJ_FREEZE_RAW(callback_arg);
17054 func = rb_func_lambda_new(refine_sym_proc_call, callback_arg, 1, (-1));
17055 rb_hash_aset(ref, block_code, func);
17056 }
17057 block_code = func;
17058 }
17059 return block_code;
17060 }
17061 else {
17062 return vm_to_proc(block_code);
17063 }
17064 }
17065 else if (blockiseq != ((void *)0)) {
17066 struct rb_captured_block *captured = VM_CFP_TO_CAPTURED_BLOCK(reg_cfp);
17067 captured->code.iseq = blockiseq;
17068 return VM_BH_FROM_ISEQ_BLOCK(captured);
17069 }
17070 else {
17071 if (is_super) {
17072 return ((VM_EP_LEP(((((reg_cfp)->ep)))))[(-1)]);
17073 }
17074 else {
17075 return 0;
17076 }
17077 }
17078}
17079static inline VALUE vm_call_iseq_setup_2(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, int opt_pc, int param_size, int local_size);
17080__attribute__ ((__always_inline__)) static VALUE vm_call_iseq_setup_normal(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const rb_callable_method_entry_t *me, int opt_pc, int param_size, int local_size);
17081static inline VALUE vm_call_iseq_setup_tailcall(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, int opt_pc);
17082static VALUE vm_call_super_method(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
17083static VALUE vm_call_method_nome(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
17084static VALUE vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
17085static inline VALUE vm_call_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
17086static vm_call_handler vm_call_iseq_setup_func(const struct rb_callinfo *ci, const int param_size, const int local_size);
17087static VALUE
17088vm_call_iseq_setup_tailcall_0start(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17089{
17090 ((void)0);
17091 return vm_call_iseq_setup_tailcall(ec, cfp, calling, 0);
17092}
17093static VALUE
17094vm_call_iseq_setup_normal_0start(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17095{
17096 ((void)0);
17097 const struct rb_callcache *cc = calling->cc;
17098 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
17099 int param = iseq->body->param.size;
17100 int local = iseq->body->local_table_size;
17101 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
17102}
17103static _Bool
17104rb_simple_iseq_p(const rb_iseq_t *iseq)
17105{
17106 return iseq->body->param.flags.has_opt == 0 &&
17107 iseq->body->param.flags.has_rest == 0 &&
17108 iseq->body->param.flags.has_post == 0 &&
17109 iseq->body->param.flags.has_kw == 0 &&
17110 iseq->body->param.flags.has_kwrest == 0 &&
17111 iseq->body->param.flags.accepts_no_kwarg == 0 &&
17112 iseq->body->param.flags.has_block == 0;
17113}static inline
17114__attribute__ ((__visibility__("default"))) _Bool
17115rb_iseq_only_optparam_p(const rb_iseq_t *iseq)
17116{
17117 return iseq->body->param.flags.has_opt == 1 &&
17118 iseq->body->param.flags.has_rest == 0 &&
17119 iseq->body->param.flags.has_post == 0 &&
17120 iseq->body->param.flags.has_kw == 0 &&
17121 iseq->body->param.flags.has_kwrest == 0 &&
17122 iseq->body->param.flags.accepts_no_kwarg == 0 &&
17123 iseq->body->param.flags.has_block == 0;
17124}static inline
17125__attribute__ ((__visibility__("default"))) _Bool
17126rb_iseq_only_kwparam_p(const rb_iseq_t *iseq)
17127{
17128 return iseq->body->param.flags.has_opt == 0 &&
17129 iseq->body->param.flags.has_rest == 0 &&
17130 iseq->body->param.flags.has_post == 0 &&
17131 iseq->body->param.flags.has_kw == 1 &&
17132 iseq->body->param.flags.has_kwrest == 0 &&
17133 iseq->body->param.flags.has_block == 0;
17134}
17135static _Bool
17136rb_splat_or_kwargs_p(const struct rb_callinfo *__restrict__ ci)
17137{
17138 return (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) || (vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit)));
17139}
17140static inline void
17141CALLER_SETUP_ARG(struct rb_control_frame_struct *__restrict__ cfp,
17142 struct rb_calling_info *__restrict__ calling,
17143 const struct rb_callinfo *__restrict__ ci)
17144{
17145 if ((__builtin_expect(!!((vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit))), 0))) {
17146 VALUE final_hash;
17147 vm_caller_setup_arg_splat(cfp, calling);
17148 if (!(vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit))) &&
17149 calling->argc > 0 &&
17150 RB_TYPE_P((final_hash = *(cfp->sp - 1)), RUBY_T_HASH) &&
17151 (((struct RHash *)final_hash)->basic.flags & RHASH_PASS_AS_KEYWORDS)) {
17152 *(cfp->sp - 1) = rb_hash_dup(final_hash);
17153 calling->kw_splat = 1;
17154 }
17155 }
17156 if ((__builtin_expect(!!((vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit)))), 0))) {
17157 if ((vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit))) {
17158 vm_caller_setup_arg_kw(cfp, calling, ci);
17159 }
17160 else {
17161 VALUE keyword_hash = cfp->sp[-1];
17162 if (!RB_TYPE_P(keyword_hash, RUBY_T_HASH)) {
17163 cfp->sp[-1] = rb_hash_dup(rb_to_hash_type(keyword_hash));
17164 }
17165 else if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_MUT_bit))) {
17166 cfp->sp[-1] = rb_hash_dup(keyword_hash);
17167 }
17168 }
17169 }
17170}
17171static inline void
17172CALLER_REMOVE_EMPTY_KW_SPLAT(struct rb_control_frame_struct *__restrict__ cfp,
17173 struct rb_calling_info *__restrict__ calling,
17174 const struct rb_callinfo *__restrict__ ci)
17175{
17176 if ((__builtin_expect(!!(calling->kw_splat), 0))) {
17177 if (RHASH_EMPTY_P(cfp->sp[-1])) {
17178 cfp->sp--;
17179 calling->argc--;
17180 calling->kw_splat = 0;
17181 }
17182 }
17183}
17184static VALUE
17185vm_call_iseq_setup_normal_opt_start(rb_execution_context_t *ec, rb_control_frame_t *cfp,
17186 struct rb_calling_info *calling)
17187{
17188 const struct rb_callcache *cc = calling->cc;
17189 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
17190 const int lead_num = iseq->body->param.lead_num;
17191 const int opt = calling->argc - lead_num;
17192 const int opt_num = iseq->body->param.opt_num;
17193 const int opt_pc = (int)iseq->body->param.opt_table[opt];
17194 const int param = iseq->body->param.size;
17195 const int local = iseq->body->local_table_size;
17196 const int delta = opt_num - opt;
17197 ((void)0);
17198 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), opt_pc, param - delta, local);
17199}
17200static VALUE
17201vm_call_iseq_setup_tailcall_opt_start(rb_execution_context_t *ec, rb_control_frame_t *cfp,
17202 struct rb_calling_info *calling)
17203{
17204 const struct rb_callcache *cc = calling->cc;
17205 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
17206 const int lead_num = iseq->body->param.lead_num;
17207 const int opt = calling->argc - lead_num;
17208 const int opt_pc = (int)iseq->body->param.opt_table[opt];
17209 ((void)0);
17210 return vm_call_iseq_setup_tailcall(ec, cfp, calling, opt_pc);
17211}
17212static void
17213args_setup_kw_parameters(rb_execution_context_t *const ec, const rb_iseq_t *const iseq,
17214 VALUE *const passed_values, const int passed_keyword_len, const VALUE *const passed_keywords,
17215 VALUE *const locals);
17216static VALUE
17217vm_call_iseq_setup_kwparm_kwarg(rb_execution_context_t *ec, rb_control_frame_t *cfp,
17218 struct rb_calling_info *calling)
17219{
17220 const struct rb_callinfo *ci = calling->ci;
17221 const struct rb_callcache *cc = calling->cc;
17222 ((void)0);
17223 ((void)0);
17224 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
17225 const struct rb_iseq_param_keyword *kw_param = iseq->body->param.keyword;
17226 const struct rb_callinfo_kwarg *kw_arg = vm_ci_kwarg(ci);
17227 const int ci_kw_len = kw_arg->keyword_len;
17228 const VALUE * const ci_keywords = kw_arg->keywords;
17229 VALUE *argv = cfp->sp - calling->argc;
17230 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
17231 const int lead_num = iseq->body->param.lead_num;
17232 VALUE * const ci_kws = ((VALUE *)__builtin_alloca (rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len))));
17233 ruby_nonempty_memcpy((ci_kws), (argv + lead_num), rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len)));
17234 args_setup_kw_parameters(ec, iseq, ci_kws, ci_kw_len, ci_keywords, klocals);
17235 int param = iseq->body->param.size;
17236 int local = iseq->body->local_table_size;
17237 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
17238}
17239static VALUE
17240vm_call_iseq_setup_kwparm_nokwarg(rb_execution_context_t *ec, rb_control_frame_t *cfp,
17241 struct rb_calling_info *calling)
17242{
17243 const struct rb_callinfo *__attribute__ ((__unused__)) ci = calling->ci;
17244 const struct rb_callcache *cc = calling->cc;
17245 ((void)0);
17246 ((void)0);
17247 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
17248 const struct rb_iseq_param_keyword *kw_param = iseq->body->param.keyword;
17249 VALUE * const argv = cfp->sp - calling->argc;
17250 VALUE * const klocals = argv + kw_param->bits_start - kw_param->num;
17251 int i;
17252 for (i=0; i<kw_param->num; i++) {
17253 klocals[i] = kw_param->default_values[i];
17254 }
17255 klocals[i] = __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
17256 int param = iseq->body->param.size;
17257 int local = iseq->body->local_table_size;
17258 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
17259}
17260static inline int
17261vm_callee_setup_arg(rb_execution_context_t *ec, struct rb_calling_info *calling,
17262 const rb_iseq_t *iseq, VALUE *argv, int param_size, int local_size)
17263{
17264 const struct rb_callinfo *ci = calling->ci;
17265 const struct rb_callcache *cc = calling->cc;
17266 _Bool cacheable_ci = vm_ci_markable(ci);
17267 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_bit))), 1))) {
17268 if ((__builtin_expect(!!(rb_simple_iseq_p(iseq)), 1))) {
17269 rb_control_frame_t *cfp = ec->cfp;
17270 CALLER_SETUP_ARG(cfp, calling, ci);
17271 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
17272 if (calling->argc != iseq->body->param.lead_num) {
17273 argument_arity_error(ec, iseq, calling->argc, iseq->body->param.lead_num, iseq->body->param.lead_num);
17274 }
17275 ((void)0);
17276 ((void)0);
17277 CC_SET_FASTPATH(cc, vm_call_iseq_setup_func(ci, param_size, local_size), cacheable_ci && vm_call_iseq_optimizable_p(ci, cc));
17278 return 0;
17279 }
17280 else if (rb_iseq_only_optparam_p(iseq)) {
17281 rb_control_frame_t *cfp = ec->cfp;
17282 CALLER_SETUP_ARG(cfp, calling, ci);
17283 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
17284 const int lead_num = iseq->body->param.lead_num;
17285 const int opt_num = iseq->body->param.opt_num;
17286 const int argc = calling->argc;
17287 const int opt = argc - lead_num;
17288 if (opt < 0 || opt > opt_num) {
17289 argument_arity_error(ec, iseq, argc, lead_num, lead_num + opt_num);
17290 }
17291 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit))), 1))) {
17292 CC_SET_FASTPATH(cc, vm_call_iseq_setup_normal_opt_start,
17293 !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
17294 cacheable_ci && !((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) == METHOD_VISI_PROTECTED));
17295 }
17296 else {
17297 CC_SET_FASTPATH(cc, vm_call_iseq_setup_tailcall_opt_start,
17298 !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
17299 cacheable_ci && !((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) == METHOD_VISI_PROTECTED));
17300 }
17301 ((void)0);
17302 for (int i=argc; i<lead_num + opt_num; i++) {
17303 argv[i] = ((VALUE)RUBY_Qnil);
17304 }
17305 return (int)iseq->body->param.opt_table[opt];
17306 }
17307 else if (rb_iseq_only_kwparam_p(iseq) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit))) {
17308 const int lead_num = iseq->body->param.lead_num;
17309 const int argc = calling->argc;
17310 const struct rb_iseq_param_keyword *kw_param = iseq->body->param.keyword;
17311 if (vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) {
17312 const struct rb_callinfo_kwarg *kw_arg = vm_ci_kwarg(ci);
17313 if (argc - kw_arg->keyword_len == lead_num) {
17314 const int ci_kw_len = kw_arg->keyword_len;
17315 const VALUE * const ci_keywords = kw_arg->keywords;
17316 VALUE * const ci_kws = ((VALUE *)__builtin_alloca (rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len))));
17317 ruby_nonempty_memcpy((ci_kws), (argv + lead_num), rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len)));
17318 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
17319 args_setup_kw_parameters(ec, iseq, ci_kws, ci_kw_len, ci_keywords, klocals);
17320 CC_SET_FASTPATH(cc, vm_call_iseq_setup_kwparm_kwarg,
17321 cacheable_ci && !((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) == METHOD_VISI_PROTECTED));
17322 return 0;
17323 }
17324 }
17325 else if (argc == lead_num) {
17326 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
17327 args_setup_kw_parameters(ec, iseq, ((void *)0), 0, ((void *)0), klocals);
17328 if (klocals[kw_param->num] == __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0))) {
17329 CC_SET_FASTPATH(cc, vm_call_iseq_setup_kwparm_nokwarg,
17330 cacheable_ci && !((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) == METHOD_VISI_PROTECTED));
17331 }
17332 return 0;
17333 }
17334 }
17335 }
17336 return setup_parameters_complex(ec, iseq, calling, ci, argv, arg_setup_method);
17337}
17338COLDFUNC static VALUE
17339vm_call_iseq_setup(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling) {
17340 ((void)0);
17341 const struct rb_callcache *cc = calling->cc;
17342 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
17343 const int param_size = iseq->body->param.size;
17344 const int local_size = iseq->body->local_table_size;
17345 const int opt_pc = vm_callee_setup_arg(ec, calling, def_iseq_ptr(vm_cc_cme(cc)->def), cfp->sp - calling->argc, param_size, local_size);
17346 return vm_call_iseq_setup_2(ec, cfp, calling, opt_pc, param_size, local_size);
17347}
17348COLDFUNC static VALUE
17349vm_call_iseq_setup_2(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling,
17350 int opt_pc, int param_size, int local_size) {
17351 const struct rb_callinfo *ci = calling->ci;
17352 const struct rb_callcache *cc = calling->cc;
17353 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit))), 1))) {
17354 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), opt_pc, param_size, local_size);
17355 }
17356 else {
17357 return vm_call_iseq_setup_tailcall(ec, cfp, calling, opt_pc);
17358 }
17359}
17360static inline VALUE
17361vm_call_iseq_setup_normal(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const rb_callable_method_entry_t *me,
17362 int opt_pc, int param_size, int local_size)
17363{
17364 const rb_iseq_t *iseq = def_iseq_ptr(me->def);
17365 VALUE *argv = cfp->sp - calling->argc;
17366 VALUE *sp = argv + param_size;
17367 cfp->sp = argv - 1 ;
17368 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_METHOD | VM_ENV_FLAG_LOCAL, calling->recv,
17369 calling->block_handler, (VALUE)me,
17370 iseq->body->iseq_encoded + opt_pc, sp,
17371 local_size - param_size,
17372 iseq->body->stack_max);
17373 return ((VALUE)RUBY_Qundef);
17374}
17375COLDFUNC static VALUE
17376vm_call_iseq_setup_tailcall(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, int opt_pc) {
17377 const struct rb_callcache *cc = calling->cc;
17378 unsigned int i;
17379 VALUE *argv = cfp->sp - calling->argc;
17380 const rb_callable_method_entry_t *me = vm_cc_cme(cc);
17381 const rb_iseq_t *iseq = def_iseq_ptr(me->def);
17382 VALUE *src_argv = argv;
17383 VALUE *sp_orig, *sp;
17384 VALUE finish_flag = VM_FRAME_FINISHED_P(cfp) ? VM_FRAME_FLAG_FINISH : 0;
17385 if (VM_BH_FROM_CFP_P(calling->block_handler, cfp)) {
17386 struct rb_captured_block *dst_captured = VM_CFP_TO_CAPTURED_BLOCK(((cfp)+1));
17387 const struct rb_captured_block *src_captured = VM_BH_TO_CAPT_BLOCK(calling->block_handler);
17388 dst_captured->code.val = src_captured->code.val;
17389 if (VM_BH_ISEQ_BLOCK_P(calling->block_handler)) {
17390 calling->block_handler = VM_BH_FROM_ISEQ_BLOCK(dst_captured);
17391 }
17392 else {
17393 calling->block_handler = VM_BH_FROM_IFUNC_BLOCK(dst_captured);
17394 }
17395 }
17396 vm_pop_frame(ec, cfp, cfp->ep);
17397 cfp = ec->cfp;
17398 sp_orig = sp = cfp->sp;
17399 sp[0] = calling->recv;
17400 sp++;
17401 for (i=0; i < iseq->body->param.size; i++) {
17402 *sp++ = src_argv[i];
17403 }
17404 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_METHOD | VM_ENV_FLAG_LOCAL | finish_flag,
17405 calling->recv, calling->block_handler, (VALUE)me,
17406 iseq->body->iseq_encoded + opt_pc, sp,
17407 iseq->body->local_table_size - iseq->body->param.size,
17408 iseq->body->stack_max);
17409 cfp->sp = sp_orig;
17410 return ((VALUE)RUBY_Qundef);
17411}
17412static void
17413ractor_unsafe_check(void)
17414{
17415 if (!rb_ractor_main_p()) {
17416 rb_raise(rb_eRactorUnsafeError, "ractor unsafe method called from not main ractor");
17417 }
17418}
17419static VALUE
17420call_cfunc_m2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17421{
17422 ractor_unsafe_check();
17423 return (*func)(recv, rb_ary_new_from_values(argc, argv));
17424}
17425static VALUE
17426call_cfunc_m1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17427{
17428 ractor_unsafe_check();
17429 return (*func)(argc, argv, recv);
17430}
17431static VALUE
17432call_cfunc_0(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17433{
17434 ractor_unsafe_check();
17435 VALUE(*f)(VALUE) = (VALUE(*)(VALUE))func;
17436 return (*f)(recv);
17437}
17438static VALUE
17439call_cfunc_1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17440{
17441 ractor_unsafe_check();
17442 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
17443 return (*f)(recv, argv[0]);
17444}
17445static VALUE
17446call_cfunc_2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17447{
17448 ractor_unsafe_check();
17449 VALUE(*f)(VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE))func;
17450 return (*f)(recv, argv[0], argv[1]);
17451}
17452static VALUE
17453call_cfunc_3(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17454{
17455 ractor_unsafe_check();
17456 VALUE(*f)(VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE))func;
17457 return (*f)(recv, argv[0], argv[1], argv[2]);
17458}
17459static VALUE
17460call_cfunc_4(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17461{
17462 ractor_unsafe_check();
17463 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE))func;
17464 return (*f)(recv, argv[0], argv[1], argv[2], argv[3]);
17465}
17466static VALUE
17467call_cfunc_5(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17468{
17469 ractor_unsafe_check();
17470 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17471 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4]);
17472}
17473static VALUE
17474call_cfunc_6(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17475{
17476 ractor_unsafe_check();
17477 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17478 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
17479}
17480static VALUE
17481call_cfunc_7(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17482{
17483 ractor_unsafe_check();
17484 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17485 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
17486}
17487static VALUE
17488call_cfunc_8(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17489{
17490 ractor_unsafe_check();
17491 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17492 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
17493}
17494static VALUE
17495call_cfunc_9(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17496{
17497 ractor_unsafe_check();
17498 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17499 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
17500}
17501static VALUE
17502call_cfunc_10(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17503{
17504 ractor_unsafe_check();
17505 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17506 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
17507}
17508static VALUE
17509call_cfunc_11(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17510{
17511 ractor_unsafe_check();
17512 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17513 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10]);
17514}
17515static VALUE
17516call_cfunc_12(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17517{
17518 ractor_unsafe_check();
17519 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17520 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11]);
17521}
17522static VALUE
17523call_cfunc_13(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17524{
17525 ractor_unsafe_check();
17526 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17527 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12]);
17528}
17529static VALUE
17530call_cfunc_14(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17531{
17532 ractor_unsafe_check();
17533 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17534 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13]);
17535}
17536static VALUE
17537call_cfunc_15(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17538{
17539 ractor_unsafe_check();
17540 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17541 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14]);
17542}
17543static VALUE
17544ractor_safe_call_cfunc_m2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17545{
17546 return (*func)(recv, rb_ary_new_from_values(argc, argv));
17547}
17548static VALUE
17549ractor_safe_call_cfunc_m1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17550{
17551 return (*func)(argc, argv, recv);
17552}
17553static VALUE
17554ractor_safe_call_cfunc_0(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17555{
17556 VALUE(*f)(VALUE) = (VALUE(*)(VALUE))func;
17557 return (*f)(recv);
17558}
17559static VALUE
17560ractor_safe_call_cfunc_1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17561{
17562 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
17563 return (*f)(recv, argv[0]);
17564}
17565static VALUE
17566ractor_safe_call_cfunc_2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17567{
17568 VALUE(*f)(VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE))func;
17569 return (*f)(recv, argv[0], argv[1]);
17570}
17571static VALUE
17572ractor_safe_call_cfunc_3(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17573{
17574 VALUE(*f)(VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE))func;
17575 return (*f)(recv, argv[0], argv[1], argv[2]);
17576}
17577static VALUE
17578ractor_safe_call_cfunc_4(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17579{
17580 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE))func;
17581 return (*f)(recv, argv[0], argv[1], argv[2], argv[3]);
17582}
17583static VALUE
17584ractor_safe_call_cfunc_5(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17585{
17586 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17587 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4]);
17588}
17589static VALUE
17590ractor_safe_call_cfunc_6(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17591{
17592 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17593 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
17594}
17595static VALUE
17596ractor_safe_call_cfunc_7(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17597{
17598 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17599 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
17600}
17601static VALUE
17602ractor_safe_call_cfunc_8(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17603{
17604 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17605 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
17606}
17607static VALUE
17608ractor_safe_call_cfunc_9(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17609{
17610 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17611 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
17612}
17613static VALUE
17614ractor_safe_call_cfunc_10(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17615{
17616 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17617 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
17618}
17619static VALUE
17620ractor_safe_call_cfunc_11(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17621{
17622 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17623 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10]);
17624}
17625static VALUE
17626ractor_safe_call_cfunc_12(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17627{
17628 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17629 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11]);
17630}
17631static VALUE
17632ractor_safe_call_cfunc_13(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17633{
17634 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17635 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12]);
17636}
17637static VALUE
17638ractor_safe_call_cfunc_14(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17639{
17640 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17641 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13]);
17642}
17643static VALUE
17644ractor_safe_call_cfunc_15(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
17645{
17646 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
17647 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14]);
17648}
17649static inline int
17650vm_cfp_consistent_p(rb_execution_context_t *ec, const rb_control_frame_t *reg_cfp)
17651{
17652 const int ov_flags = RAISED_STACKOVERFLOW;
17653 if ((__builtin_expect(!!(reg_cfp == ec->cfp + 1), 1))) return 1;
17654 if ((((ec)->raised_flag & (ov_flags)) != 0)) {
17655 ((ec)->raised_flag &= ~(ov_flags));
17656 return 1;
17657 }
17658 return 0;
17659}
17660static inline
17661const rb_method_cfunc_t *
17662vm_method_cfunc_entry(const rb_callable_method_entry_t *me)
17663{
17664 return __extension__({
17665 ;
17666 ; __typeof__(&(me->def)->body.cfunc) unaligned_member_access_result = (&(me->def)->body.cfunc);
17667 ; unaligned_member_access_result; });
17668}
17669static VALUE
17670vm_call_cfunc_with_frame(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
17671{
17672 ((void)0);
17673 const struct rb_callinfo *ci = calling->ci;
17674 const struct rb_callcache *cc = calling->cc;
17675 VALUE val;
17676 const rb_callable_method_entry_t *me = vm_cc_cme(cc);
17677 const rb_method_cfunc_t *cfunc = vm_method_cfunc_entry(me);
17678 int len = cfunc->argc;
17679 VALUE recv = calling->recv;
17680 VALUE block_handler = calling->block_handler;
17681 VALUE frame_type = VM_FRAME_MAGIC_CFUNC | VM_FRAME_FLAG_CFRAME | VM_ENV_FLAG_LOCAL;
17682 int argc = calling->argc;
17683 int orig_argc = argc;
17684 if ((__builtin_expect(!!(calling->kw_splat), 0))) {
17685 frame_type |= VM_FRAME_FLAG_CFRAME_KW;
17686 }
17687 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, me->owner, me->def->original_id, &args)) { do {} while (0); } } } while (0);
17688 do { const rb_event_flag_t flag_arg_ = (0x0020); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, recv, me->def->original_id, vm_ci_mid(ci), me->owner, ((VALUE)RUBY_Qundef), 0); } } while (0);
17689 vm_push_frame(ec, ((void *)0), frame_type, recv,
17690 block_handler, (VALUE)me,
17691 0, ec->cfp->sp, 0, 0);
17692 if (len >= 0) rb_check_arity(argc, len, len);
17693 reg_cfp->sp -= orig_argc + 1;
17694 val = (*cfunc->invoker)(recv, argc, reg_cfp->sp + 1, cfunc->func);
17695 ((__builtin_expect(!!(vm_cfp_consistent_p(ec, reg_cfp)), 1)) ? (void)0 : rb_bug("vm_call_cfunc" ": cfp consistency error (%p, %p)", (void *)reg_cfp, (void *)(ec->cfp+1)));
17696 rb_vm_pop_frame(ec);
17697 do { const rb_event_flag_t flag_arg_ = (0x0040); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, recv, me->def->original_id, vm_ci_mid(ci), me->owner, val, 0); } } while (0);
17698 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, me->owner, me->def->original_id, &args)) { do {} while (0); } } } while (0);
17699 return val;
17700}
17701static VALUE
17702vm_call_cfunc(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
17703{
17704 const struct rb_callinfo *ci = calling->ci;
17705 ((void)0);
17706 CALLER_SETUP_ARG(reg_cfp, calling, ci);
17707 CALLER_REMOVE_EMPTY_KW_SPLAT(reg_cfp, calling, ci);
17708 CC_SET_FASTPATH(calling->cc, vm_call_cfunc_with_frame, !rb_splat_or_kwargs_p(ci) && !calling->kw_splat);
17709 return vm_call_cfunc_with_frame(ec, reg_cfp, calling);
17710}
17711static VALUE
17712vm_call_ivar(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17713{
17714 const struct rb_callcache *cc = calling->cc;
17715 ((void)0);
17716 cfp->sp -= 1;
17717 return vm_getivar(calling->recv, vm_cc_cme(cc)->def->body.attr.id, ((void *)0), ((void *)0), cc, 1);
17718}
17719static VALUE
17720vm_call_attrset(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17721{
17722 const struct rb_callcache *cc = calling->cc;
17723 ((void)0);
17724 VALUE val = *(cfp->sp - 1);
17725 cfp->sp -= 2;
17726 return vm_setivar(calling->recv, vm_cc_cme(cc)->def->body.attr.id, val, ((void *)0), ((void *)0), cc, 1);
17727}static inline
17728_Bool
17729rb_vm_call_ivar_attrset_p(const vm_call_handler ch)
17730{
17731 return (ch == vm_call_ivar || ch == vm_call_attrset);
17732}
17733static inline VALUE
17734vm_call_bmethod_body(rb_execution_context_t *ec, struct rb_calling_info *calling, const VALUE *argv)
17735{
17736 rb_proc_t *proc;
17737 VALUE val;
17738 const struct rb_callcache *cc = calling->cc;
17739 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
17740 VALUE procv = cme->def->body.bmethod.proc;
17741 if (!RB_FL_TEST_RAW((procv), RUBY_FL_SHAREABLE) &&
17742 cme->def->body.bmethod.defined_ractor != rb_ractor_self(rb_ec_ractor_ptr(ec))) {
17743 rb_raise(rb_eRuntimeError, "defined with an un-shareable Proc in a different Ractor");
17744 }
17745 (((proc)) = (rb_proc_t*)((struct RData *)(((procv))))->data);
17746 val = rb_vm_invoke_bmethod(ec, proc, calling->recv, calling->argc, argv, calling->kw_splat, calling->block_handler, vm_cc_cme(cc));
17747 return val;
17748}
17749static VALUE
17750vm_call_bmethod(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17751{
17752 ((void)0);
17753 VALUE *argv;
17754 int argc;
17755 const struct rb_callinfo *ci = calling->ci;
17756 CALLER_SETUP_ARG(cfp, calling, ci);
17757 argc = calling->argc;
17758 argv = ((VALUE *)__builtin_alloca (rbimpl_size_mul_or_raise(sizeof(VALUE), (argc))));
17759 ruby_nonempty_memcpy((argv), (cfp->sp - argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
17760 cfp->sp += - argc - 1;
17761 return vm_call_bmethod_body(ec, calling, argv);
17762}static inline
17763__attribute__ ((__visibility__("default"))) VALUE
17764rb_find_defined_class_by_owner(VALUE current_class, VALUE target_owner)
17765{
17766 VALUE klass = current_class;
17767 if (RB_TYPE_P(klass, RUBY_T_ICLASS) && RB_FL_TEST(klass, ((VALUE)RUBY_FL_USER5)) &&
17768 RB_TYPE_P(RBASIC_CLASS(klass), RUBY_T_CLASS)) {
17769 klass = RBASIC_CLASS(klass);
17770 }
17771 while (RB_TEST(klass)) {
17772 VALUE owner = RB_TYPE_P(klass, RUBY_T_ICLASS) ? RBASIC_CLASS(klass) : klass;
17773 if (owner == target_owner) {
17774 return klass;
17775 }
17776 klass = RCLASS_SUPER(klass);
17777 }
17778 return current_class;
17779}
17780static const rb_callable_method_entry_t *
17781aliased_callable_method_entry(const rb_callable_method_entry_t *me)
17782{
17783 const rb_method_entry_t *orig_me = me->def->body.alias.original_me;
17784 const rb_callable_method_entry_t *cme;
17785 if (orig_me->defined_class == 0) {
17786 VALUE defined_class = rb_find_defined_class_by_owner(me->defined_class, orig_me->owner);
17787 ((void)0);
17788 cme = rb_method_entry_complement_defined_class(orig_me, me->called_id, defined_class);
17789 if (me->def->alias_count + me->def->complemented_count == 0) {
17790 rb_obj_write((VALUE)(me), __extension__({
17791 ;
17792 ; __typeof__((VALUE *)(&me->def->body.alias.original_me)) unaligned_member_access_result = ((VALUE *)(&me->def->body.alias.original_me));
17793 ; unaligned_member_access_result; }), (VALUE)(cme), "./vm_insnhelper.c", 3159);
17794 }
17795 else {
17796 rb_method_definition_t *def =
17797 rb_method_definition_create(VM_METHOD_TYPE_ALIAS, me->def->original_id);
17798 rb_method_definition_set((rb_method_entry_t *)me, def, (void *)cme);
17799 }
17800 }
17801 else {
17802 cme = (const rb_callable_method_entry_t *)orig_me;
17803 }
17804 ((void)0);
17805 return cme;
17806}static inline
17807const rb_callable_method_entry_t *
17808rb_aliased_callable_method_entry(const rb_callable_method_entry_t *me)
17809{
17810 return aliased_callable_method_entry(me);
17811}
17812static VALUE
17813vm_call_alias(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17814{
17815 calling->cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5), .klass = ((VALUE)RUBY_Qundef), .cme_ = aliased_callable_method_entry(vm_cc_cme(calling->cc)), .call_ = vm_call_general, .aux_ = { 0 }, };
17816 return vm_call_method_each_type(ec, cfp, calling);
17817}
17818static enum method_missing_reason
17819ci_missing_reason(const struct rb_callinfo *ci)
17820{
17821 enum method_missing_reason stat = MISSING_NOENTRY;
17822 if (vm_ci_flag(ci) & (0x01 << VM_CALL_VCALL_bit)) stat |= MISSING_VCALL;
17823 if (vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit)) stat |= MISSING_FCALL;
17824 if (vm_ci_flag(ci) & (0x01 << VM_CALL_SUPER_bit)) stat |= MISSING_SUPER;
17825 return stat;
17826}
17827static VALUE
17828vm_call_symbol(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
17829 struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE symbol)
17830{
17831 ((__builtin_expect(!!(!!(calling->argc >= 0)), 1)) ? ((void)0) : __builtin_unreachable());
17832 enum method_missing_reason missing_reason = MISSING_NOENTRY;
17833 int argc = calling->argc;
17834 VALUE recv = calling->recv;
17835 VALUE klass = rb_class_of(recv);
17836 ID mid = rb_check_id(&symbol);
17837 int flags = (0x01 << VM_CALL_FCALL_bit) |
17838 (0x01 << VM_CALL_OPT_SEND_bit) |
17839 (calling->kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0);
17840 if ((__builtin_expect(!!(! mid), 0))) {
17841 mid = idMethodMissing;
17842 missing_reason = ci_missing_reason(ci);
17843 ec->method_missing_reason = missing_reason;
17844 int i = argc;
17845 do { __extension__ _Static_assert(sizeof(*((reg_cfp)->sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*((reg_cfp)->sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*((reg_cfp))) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*((reg_cfp))) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&((reg_cfp)->sp)[((1))]; if ((__builtin_expect(!!(((reg_cfp)) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
17846 (((reg_cfp)->sp) += (((1))));
17847 memmove((&(*(((((reg_cfp)->sp)))-(i - 1)-1))), (&(*(((((reg_cfp)->sp)))-(i)-1))), rbimpl_size_mul_or_raise(sizeof(VALUE), (i)));
17848 argc = ++calling->argc;
17849 if (rb_method_basic_definition_p(klass, idMethodMissing)) {
17850 (*(((((reg_cfp)->sp)))-(i)-1)) = symbol;
17851 int priv = vm_ci_flag(ci) & ((0x01 << VM_CALL_FCALL_bit) | (0x01 << VM_CALL_VCALL_bit));
17852 const VALUE *argv = (((((reg_cfp)->sp)))-(argc));
17853 VALUE exc = rb_make_no_method_exception(
17854 rb_eNoMethodError, 0, recv, argc, argv, priv);
17855 rb_exc_raise(exc);
17856 }
17857 else {
17858 (*(((((reg_cfp)->sp)))-(i)-1)) = rb_str_intern(symbol);
17859 }
17860 }
17861 calling->ci = &(struct rb_callinfo) { .flags = RUBY_T_IMEMO | (imemo_callinfo << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4), .mid = mid, .flag = flags, .argc = argc, .kwarg = vm_ci_kwarg(ci), };
17862 calling->cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5), .klass = klass, .cme_ = rb_callable_method_entry_with_refinements(klass, mid, ((void *)0)), .call_ = vm_call_general, .aux_ = { .method_missing_reason = missing_reason }, };
17863 return vm_call_method(ec, reg_cfp, calling);
17864}
17865static VALUE
17866vm_call_opt_send(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
17867{
17868 ((void)0);
17869 int i;
17870 VALUE sym;
17871 CALLER_SETUP_ARG(reg_cfp, calling, calling->ci);
17872 i = calling->argc - 1;
17873 if (calling->argc == 0) {
17874 rb_raise(rb_eArgError, "no method name given");
17875 }
17876 else {
17877 sym = (*(((((reg_cfp)->sp)))-(i)-1));
17878 if (i > 0) {
17879 memmove((&(*(((((reg_cfp)->sp)))-(i)-1))), (&(*(((((reg_cfp)->sp)))-(i-1)-1))), rbimpl_size_mul_or_raise(sizeof(VALUE), (i)));
17880 }
17881 calling->argc -= 1;
17882 (((reg_cfp)->sp) -= (((1))));
17883 return vm_call_symbol(ec, reg_cfp, calling, calling->ci, sym);
17884 }
17885}
17886static VALUE
17887vm_call_method_missing_body(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling,
17888 const struct rb_callinfo *orig_ci, enum method_missing_reason reason)
17889{
17890 ((void)0);
17891 VALUE *argv = (((((reg_cfp)->sp)))-(calling->argc));
17892 unsigned int argc;
17893 CALLER_SETUP_ARG(reg_cfp, calling, orig_ci);
17894 argc = calling->argc + 1;
17895 unsigned int flag = (0x01 << VM_CALL_FCALL_bit) | (0x01 << VM_CALL_OPT_SEND_bit) | (calling->kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0);
17896 calling->argc = argc;
17897 do { __extension__ _Static_assert(sizeof(*((reg_cfp)->sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*((reg_cfp)->sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*((reg_cfp))) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*((reg_cfp))) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&((reg_cfp)->sp)[((1))]; if ((__builtin_expect(!!(((reg_cfp)) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
17898 ;
17899 if (argc > 1) {
17900 memmove((argv+1), (argv), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc-1)));
17901 }
17902 argv[0] = rb_id2sym(vm_ci_mid(orig_ci));
17903 (((reg_cfp)->sp) += (((1))));
17904 ec->method_missing_reason = reason;
17905 calling->ci = &(struct rb_callinfo) { .flags = RUBY_T_IMEMO | (imemo_callinfo << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4), .mid = idMethodMissing, .flag = flag, .argc = argc, .kwarg = vm_ci_kwarg(orig_ci), };
17906 calling->cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5), .klass = ((VALUE)RUBY_Qundef), .cme_ = rb_callable_method_entry_without_refinements(rb_class_of(calling->recv), idMethodMissing, ((void *)0)), .call_ = vm_call_general, .aux_ = { 0 }, };
17907 return vm_call_method(ec, reg_cfp, calling);
17908}
17909static VALUE
17910vm_call_method_missing(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
17911{
17912 return vm_call_method_missing_body(ec, reg_cfp, calling, calling->ci, vm_cc_cmethod_missing_reason(calling->cc));
17913}
17914static const rb_callable_method_entry_t *refined_method_callable_without_refinement(const rb_callable_method_entry_t *me);
17915static VALUE
17916vm_call_zsuper(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, VALUE klass)
17917{
17918 klass = RCLASS_SUPER(klass);
17919 const rb_callable_method_entry_t *cme = klass ? rb_callable_method_entry(klass, vm_ci_mid(calling->ci)) : ((void *)0);
17920 if (cme == ((void *)0)) {
17921 return vm_call_method_nome(ec, cfp, calling);
17922 }
17923 if (cme->def->type == VM_METHOD_TYPE_REFINED &&
17924 cme->def->body.refined.orig_me) {
17925 cme = refined_method_callable_without_refinement(cme);
17926 }
17927 calling->cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5), .klass = ((VALUE)RUBY_Qundef), .cme_ = cme, .call_ = vm_call_general, .aux_ = { 0 }, };
17928 return vm_call_method_each_type(ec, cfp, calling);
17929}
17930static inline VALUE
17931find_refinement(VALUE refinements, VALUE klass)
17932{
17933 if (RB_NIL_P(refinements)) {
17934 return ((VALUE)RUBY_Qnil);
17935 }
17936 return rb_hash_lookup(refinements, klass);
17937}
17938__attribute__((__pure__)) static rb_control_frame_t * current_method_entry(const rb_execution_context_t *ec, rb_control_frame_t *cfp);
17939static rb_control_frame_t *
17940current_method_entry(const rb_execution_context_t *ec, rb_control_frame_t *cfp)
17941{
17942 rb_control_frame_t *top_cfp = cfp;
17943 if (cfp->iseq && cfp->iseq->body->type == ISEQ_TYPE_BLOCK) {
17944 const rb_iseq_t *local_iseq = cfp->iseq->body->local_iseq;
17945 do {
17946 cfp = ((cfp)+1);
17947 if (RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(ec, cfp)) {
17948 return top_cfp;
17949 }
17950 } while (cfp->iseq != local_iseq);
17951 }
17952 return cfp;
17953}
17954static const rb_callable_method_entry_t *
17955refined_method_callable_without_refinement(const rb_callable_method_entry_t *me)
17956{
17957 const rb_method_entry_t *orig_me = me->def->body.refined.orig_me;
17958 const rb_callable_method_entry_t *cme;
17959 if (orig_me->defined_class == 0) {
17960 cme = ((void *)0);
17961 rb_notimplement();
17962 }
17963 else {
17964 cme = (const rb_callable_method_entry_t *)orig_me;
17965 }
17966 ((void)0);
17967 if ((!(cme) || !(cme)->def || (cme)->def->type == VM_METHOD_TYPE_UNDEF)) {
17968 cme = ((void *)0);
17969 }
17970 return cme;
17971}
17972static const rb_callable_method_entry_t *
17973search_refined_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17974{
17975 ID mid = vm_ci_mid(calling->ci);
17976 const rb_cref_t *cref = vm_get_cref(cfp->ep);
17977 const struct rb_callcache * const cc = calling->cc;
17978 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
17979 for (; cref; cref = CREF_NEXT(cref)) {
17980 const VALUE refinement = find_refinement(CREF_REFINEMENTS(cref), vm_cc_cme(cc)->owner);
17981 if (RB_NIL_P(refinement)) continue;
17982 const rb_callable_method_entry_t *const ref_me =
17983 rb_callable_method_entry(refinement, mid);
17984 if (ref_me) {
17985 if (vm_cc_call(cc) == vm_call_super_method) {
17986 const rb_control_frame_t *top_cfp = current_method_entry(ec, cfp);
17987 const rb_callable_method_entry_t *top_me = rb_vm_frame_method_entry(top_cfp);
17988 if (top_me && rb_method_definition_eq(ref_me->def, top_me->def)) {
17989 continue;
17990 }
17991 }
17992 if (cme->def->type != VM_METHOD_TYPE_REFINED ||
17993 cme->def != ref_me->def) {
17994 cme = ref_me;
17995 }
17996 if (ref_me->def->type != VM_METHOD_TYPE_REFINED) {
17997 return cme;
17998 }
17999 }
18000 else {
18001 return ((void *)0);
18002 }
18003 }
18004 if (vm_cc_cme(cc)->def->body.refined.orig_me) {
18005 return refined_method_callable_without_refinement(vm_cc_cme(cc));
18006 }
18007 else {
18008 VALUE klass = RCLASS_SUPER(vm_cc_cme(cc)->defined_class);
18009 const rb_callable_method_entry_t *cme = klass ? rb_callable_method_entry(klass, mid) : ((void *)0);
18010 return cme;
18011 }
18012}
18013static VALUE
18014vm_call_refined(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18015{
18016 struct rb_callcache *ref_cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5), .klass = ((VALUE)RUBY_Qundef), .cme_ = search_refined_method(ec, cfp, calling), .call_ = vm_call_general, .aux_ = { 0 }, };
18017 if (vm_cc_cme(ref_cc)) {
18018 calling->cc= ref_cc;
18019 return vm_call_method(ec, cfp, calling);
18020 }
18021 else {
18022 return vm_call_method_nome(ec, cfp, calling);
18023 }
18024}
18025static inline VALUE vm_invoke_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling, const struct rb_callinfo *ci, _Bool is_lambda, VALUE block_handler);
18026__attribute__((__noinline__)) static VALUE vm_invoke_block_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE block_handler);
18027static VALUE
18028vm_invoke_block_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
18029 struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE block_handler)
18030{
18031 int argc = calling->argc;
18032 if (argc > 0) memmove((&(*(((((reg_cfp)->sp)))-(argc)-1))), (&(*(((((reg_cfp)->sp)))-(argc-1)-1))), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
18033 (((reg_cfp)->sp) -= (((1))));
18034 return vm_invoke_block(ec, reg_cfp, calling, ci, 0, block_handler);
18035}
18036static VALUE
18037vm_call_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
18038{
18039 ((void)0);
18040 const struct rb_callinfo *ci = calling->ci;
18041 VALUE procval = calling->recv;
18042 return vm_invoke_block_opt_call(ec, reg_cfp, calling, ci, VM_BH_FROM_PROC(procval));
18043}
18044static VALUE
18045vm_call_opt_block_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
18046{
18047 ((void)0);
18048 VALUE block_handler = VM_ENV_BLOCK_HANDLER(VM_CF_LEP(reg_cfp));
18049 const struct rb_callinfo *ci = calling->ci;
18050 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_CALL)]&((1 << 12))) == 0), 1)))) {
18051 return vm_invoke_block_opt_call(ec, reg_cfp, calling, ci, block_handler);
18052 }
18053 else {
18054 calling->recv = rb_vm_bh_to_procval(ec, block_handler);
18055 calling->cc = rb_vm_search_method_slowpath(ci, rb_class_of(calling->recv));
18056 return vm_call_general(ec, reg_cfp, calling);
18057 }
18058}
18059static VALUE
18060vm_call_opt_struct_aref0(rb_execution_context_t *ec, struct rb_calling_info *calling)
18061{
18062 VALUE recv = calling->recv;
18063 ((void)0);
18064 ((void)0);
18065 ((void)0);
18066 const unsigned int off = vm_cc_cme(calling->cc)->def->body.optimized.index;
18067 return internal_RSTRUCT_GET(recv, off);
18068}
18069static VALUE
18070vm_call_opt_struct_aref(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
18071{
18072 ((void)0);
18073 VALUE ret = vm_call_opt_struct_aref0(ec, calling);
18074 reg_cfp->sp -= 1;
18075 return ret;
18076}
18077static VALUE
18078vm_call_opt_struct_aset0(rb_execution_context_t *ec, struct rb_calling_info *calling, VALUE val)
18079{
18080 VALUE recv = calling->recv;
18081 ((void)0);
18082 ((void)0);
18083 ((void)0);
18084 rb_check_frozen_inline(recv);
18085 const unsigned int off = vm_cc_cme(calling->cc)->def->body.optimized.index;
18086 internal_RSTRUCT_SET(recv, off, val);
18087 return val;
18088}
18089static VALUE
18090vm_call_opt_struct_aset(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
18091{
18092 ((void)0);
18093 VALUE ret = vm_call_opt_struct_aset0(ec, calling, *(reg_cfp->sp - 1));
18094 reg_cfp->sp -= 2;
18095 return ret;
18096}
18097__attribute__((__noinline__)) static VALUE vm_call_optimized(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_callinfo *ci, const struct rb_callcache *cc);
18098static VALUE
18099vm_call_optimized(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling,
18100 const struct rb_callinfo *ci, const struct rb_callcache *cc)
18101{
18102 switch (vm_cc_cme(cc)->def->body.optimized.type) {
18103 case OPTIMIZED_METHOD_TYPE_SEND:
18104 CC_SET_FASTPATH(cc, vm_call_opt_send, 1);
18105 return vm_call_opt_send(ec, cfp, calling);
18106 case OPTIMIZED_METHOD_TYPE_CALL:
18107 CC_SET_FASTPATH(cc, vm_call_opt_call, 1);
18108 return vm_call_opt_call(ec, cfp, calling);
18109 case OPTIMIZED_METHOD_TYPE_BLOCK_CALL:
18110 CC_SET_FASTPATH(cc, vm_call_opt_block_call, 1);
18111 return vm_call_opt_block_call(ec, cfp, calling);
18112 case OPTIMIZED_METHOD_TYPE_STRUCT_AREF:
18113 CALLER_SETUP_ARG(cfp, calling, ci);
18114 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
18115 rb_check_arity(calling->argc, 0, 0);
18116 CC_SET_FASTPATH(cc, vm_call_opt_struct_aref, (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SIMPLE_bit)));
18117 return vm_call_opt_struct_aref(ec, cfp, calling);
18118 case OPTIMIZED_METHOD_TYPE_STRUCT_ASET:
18119 CALLER_SETUP_ARG(cfp, calling, ci);
18120 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
18121 rb_check_arity(calling->argc, 1, 1);
18122 CC_SET_FASTPATH(cc, vm_call_opt_struct_aset, (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SIMPLE_bit)));
18123 return vm_call_opt_struct_aset(ec, cfp, calling);
18124 default:
18125 rb_bug("vm_call_method: unsupported optimized method type (%d)", vm_cc_cme(cc)->def->body.optimized.type);
18126 }
18127}
18128COLDFUNC static VALUE
18129vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling) {
18130 const struct rb_callinfo *ci = calling->ci;
18131 const struct rb_callcache *cc = calling->cc;
18132 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
18133 VALUE v;
18134 switch (cme->def->type) {
18135 case VM_METHOD_TYPE_ISEQ:
18136 CC_SET_FASTPATH(cc, vm_call_iseq_setup, 1);
18137 return vm_call_iseq_setup(ec, cfp, calling);
18138 case VM_METHOD_TYPE_NOTIMPLEMENTED:
18139 case VM_METHOD_TYPE_CFUNC:
18140 CC_SET_FASTPATH(cc, vm_call_cfunc, 1);
18141 return vm_call_cfunc(ec, cfp, calling);
18142 case VM_METHOD_TYPE_ATTRSET:
18143 CALLER_SETUP_ARG(cfp, calling, ci);
18144 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
18145 rb_check_arity(calling->argc, 1, 1);
18146 vm_cc_attr_index_set(cc, 0);
18147 const unsigned int aset_mask = ((0x01 << VM_CALL_ARGS_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KWARG_bit));
18148 if ((__builtin_expect(!!(ruby_vm_event_flags & (0x0020 | 0x0040)), 0))) { do { const rb_event_flag_t flag_arg_ = (0x0020); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, calling->recv, vm_cc_cme(cc)->def->original_id, vm_ci_mid(ci), vm_cc_cme(cc)->owner, ((VALUE)RUBY_Qundef), 0); } } while (0); v = vm_call_attrset(ec, cfp, calling); do { const rb_event_flag_t flag_arg_ = (0x0040); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, calling->recv, vm_cc_cme(cc)->def->original_id, vm_ci_mid(ci), vm_cc_cme(cc)->owner, (v), 0); } } while (0); } else { CC_SET_FASTPATH(cc, vm_call_attrset, !(vm_ci_flag(ci) & aset_mask)); v = vm_call_attrset(ec, cfp, calling); };
18149 return v;
18150 case VM_METHOD_TYPE_IVAR:
18151 CALLER_SETUP_ARG(cfp, calling, ci);
18152 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
18153 rb_check_arity(calling->argc, 0, 0);
18154 vm_cc_attr_index_set(cc, 0);
18155 const unsigned int ivar_mask = ((0x01 << VM_CALL_ARGS_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_bit));
18156 if ((__builtin_expect(!!(ruby_vm_event_flags & (0x0020 | 0x0040)), 0))) { do { const rb_event_flag_t flag_arg_ = (0x0020); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, calling->recv, vm_cc_cme(cc)->def->original_id, vm_ci_mid(ci), vm_cc_cme(cc)->owner, ((VALUE)RUBY_Qundef), 0); } } while (0); v = vm_call_ivar(ec, cfp, calling); do { const rb_event_flag_t flag_arg_ = (0x0040); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, calling->recv, vm_cc_cme(cc)->def->original_id, vm_ci_mid(ci), vm_cc_cme(cc)->owner, (v), 0); } } while (0); } else { CC_SET_FASTPATH(cc, vm_call_ivar, !(vm_ci_flag(ci) & ivar_mask)); v = vm_call_ivar(ec, cfp, calling); };
18157 return v;
18158 case VM_METHOD_TYPE_MISSING:
18159 vm_cc_method_missing_reason_set(cc, 0);
18160 CC_SET_FASTPATH(cc, vm_call_method_missing, 1);
18161 return vm_call_method_missing(ec, cfp, calling);
18162 case VM_METHOD_TYPE_BMETHOD:
18163 CC_SET_FASTPATH(cc, vm_call_bmethod, 1);
18164 return vm_call_bmethod(ec, cfp, calling);
18165 case VM_METHOD_TYPE_ALIAS:
18166 CC_SET_FASTPATH(cc, vm_call_alias, 1);
18167 return vm_call_alias(ec, cfp, calling);
18168 case VM_METHOD_TYPE_OPTIMIZED:
18169 return vm_call_optimized(ec, cfp, calling, ci, cc);
18170 case VM_METHOD_TYPE_UNDEF:
18171 break;
18172 case VM_METHOD_TYPE_ZSUPER:
18173 return vm_call_zsuper(ec, cfp, calling, ((((struct RClass *)(vm_cc_cme(cc)->defined_class))->ptr)->origin_));
18174 case VM_METHOD_TYPE_REFINED:
18175 return vm_call_refined(ec, cfp, calling);
18176 }
18177 rb_bug("vm_call_method: unsupported method type (%d)", vm_cc_cme(cc)->def->type);
18178}
18179__attribute__((__noreturn__)) static void vm_raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE obj, int call_status);
18180static VALUE
18181vm_call_method_nome(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18182{
18183 const struct rb_callinfo *ci = calling->ci;
18184 const int stat = ci_missing_reason(ci);
18185 if (vm_ci_mid(ci) == idMethodMissing) {
18186 rb_control_frame_t *reg_cfp = cfp;
18187 VALUE *argv = (((((reg_cfp)->sp)))-(calling->argc));
18188 vm_raise_method_missing(ec, calling->argc, argv, calling->recv, stat);
18189 }
18190 else {
18191 return vm_call_method_missing_body(ec, cfp, calling, ci, stat);
18192 }
18193}
18194static inline VALUE
18195vm_call_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18196{
18197 const struct rb_callinfo *ci = calling->ci;
18198 const struct rb_callcache *cc = calling->cc;
18199 ((void)0);
18200 if (vm_cc_cme(cc) != ((void *)0)) {
18201 switch ((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
18202 case METHOD_VISI_PUBLIC:
18203 return vm_call_method_each_type(ec, cfp, calling);
18204 case METHOD_VISI_PRIVATE:
18205 if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit))) {
18206 enum method_missing_reason stat = MISSING_PRIVATE;
18207 if (vm_ci_flag(ci) & (0x01 << VM_CALL_VCALL_bit)) stat |= MISSING_VCALL;
18208 vm_cc_method_missing_reason_set(cc, stat);
18209 CC_SET_FASTPATH(cc, vm_call_method_missing, 1);
18210 return vm_call_method_missing(ec, cfp, calling);
18211 }
18212 return vm_call_method_each_type(ec, cfp, calling);
18213 case METHOD_VISI_PROTECTED:
18214 if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_OPT_SEND_bit))) {
18215 if (!rb_obj_is_kind_of(cfp->self, vm_cc_cme(cc)->defined_class)) {
18216 vm_cc_method_missing_reason_set(cc, MISSING_PROTECTED);
18217 return vm_call_method_missing(ec, cfp, calling);
18218 }
18219 else {
18220 ((void)0);
18221 struct rb_callcache cc_on_stack = *cc;
18222 RB_FL_SET_RAW((VALUE)&cc_on_stack, ((VALUE)RUBY_FL_USER4));
18223 calling->cc = &cc_on_stack;
18224 return vm_call_method_each_type(ec, cfp, calling);
18225 }
18226 }
18227 return vm_call_method_each_type(ec, cfp, calling);
18228 default:
18229 rb_bug("unreachable");
18230 }
18231 }
18232 else {
18233 return vm_call_method_nome(ec, cfp, calling);
18234 }
18235}
18236static VALUE
18237vm_call_general(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
18238{
18239 ((void)0);
18240 return vm_call_method(ec, reg_cfp, calling);
18241}static inline
18242void
18243rb_vm_cc_general(const struct rb_callcache *cc)
18244{
18245 ((void)0);
18246 ((void)0);
18247 *(vm_call_handler *)&cc->call_ = vm_call_general;
18248}
18249static VALUE
18250vm_call_super_method(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
18251{
18252 ((void)0);
18253 if (ec == ((void *)0)) rb_bug("unreachable");
18254 ((void)0);
18255 return vm_call_method(ec, reg_cfp, calling);
18256}
18257static inline VALUE
18258vm_search_normal_superclass(VALUE klass)
18259{
18260 if (RB_BUILTIN_TYPE(klass) == RUBY_T_ICLASS &&
18261 RB_FL_TEST_RAW(((struct RBasic *)(klass))->klass, RMODULE_IS_REFINEMENT)) {
18262 klass = ((struct RBasic *)(klass))->klass;
18263 }
18264 klass = ((((struct RClass *)(klass))->ptr)->origin_);
18265 return RCLASS_SUPER(klass);
18266}
18267__attribute__((__noreturn__)) static void vm_super_outside(void);
18268static void
18269vm_super_outside(void)
18270{
18271 rb_raise(rb_eNoMethodError, "super called outside of method");
18272}
18273static const struct rb_callcache *
18274empty_cc_for_super(void)
18275{
18276 return rb_vm_empty_cc_for_super();
18277}
18278static const struct rb_callcache *
18279vm_search_super_method(const rb_control_frame_t *reg_cfp, struct rb_call_data *cd, VALUE recv)
18280{
18281 VALUE current_defined_class;
18282 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(reg_cfp);
18283 if (!me) {
18284 vm_super_outside();
18285 }
18286 current_defined_class = me->defined_class;
18287 if (!RB_NIL_P(((((struct RClass *)(current_defined_class))->ptr)->refined_class))) {
18288 current_defined_class = ((((struct RClass *)(current_defined_class))->ptr)->refined_class);
18289 }
18290 if (RB_BUILTIN_TYPE(current_defined_class) != RUBY_T_MODULE &&
18291 !RB_FL_TEST_RAW(current_defined_class, RMODULE_INCLUDED_INTO_REFINEMENT) &&
18292 reg_cfp->iseq != method_entry_iseqptr(me) &&
18293 !rb_obj_is_kind_of(recv, current_defined_class)) {
18294 VALUE m = RB_TYPE_P(current_defined_class, RUBY_T_ICLASS) ?
18295 ((((struct RClass *)(current_defined_class))->ptr)->includer) : current_defined_class;
18296 if (m) {
18297 rb_raise(rb_eTypeError,
18298 "self has wrong type to call super in this context: "
18299 "%""l""i" "\v"" (expected %""l""i" "\v"")",
18300 rb_obj_class(recv), m);
18301 }
18302 }
18303 if (me->def->type == VM_METHOD_TYPE_BMETHOD && (vm_ci_flag(cd->ci) & (0x01 << VM_CALL_ZSUPER_bit))) {
18304 rb_raise(rb_eRuntimeError,
18305 "implicit argument passing of super from method defined"
18306 " by define_method() is not supported."
18307 " Specify all arguments explicitly.");
18308 }
18309 ID mid = me->def->original_id;
18310 cd->ci = vm_ci_new_runtime_(mid, vm_ci_flag(cd->ci), vm_ci_argc(cd->ci), vm_ci_kwarg(cd->ci), "./vm_insnhelper.c", 3867);
18311 (rb_obj_written((VALUE)(reg_cfp->iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(cd->ci), "./vm_insnhelper.c", 3872));
18312 const struct rb_callcache *cc;
18313 VALUE klass = vm_search_normal_superclass(me->defined_class);
18314 if (!klass) {
18315 cc = vm_cc_new(klass, ((void *)0), vm_call_method_missing);
18316 rb_obj_write((VALUE)(reg_cfp->iseq), __extension__({
18317 ;
18318 ; __typeof__((VALUE *)(&cd->cc)) unaligned_member_access_result = ((VALUE *)(&cd->cc));
18319 ; unaligned_member_access_result; }), (VALUE)(cc), "./vm_insnhelper.c", 3881);
18320 }
18321 else {
18322 cc = vm_search_method_fastpath((VALUE)reg_cfp->iseq, cd, klass);
18323 const rb_callable_method_entry_t *cached_cme = vm_cc_cme(cc);
18324 if (cached_cme == ((void *)0)) {
18325 cd->cc = empty_cc_for_super();
18326 }
18327 else if (cached_cme->called_id != mid) {
18328 const rb_callable_method_entry_t *cme = rb_callable_method_entry(klass, mid);
18329 if (cme) {
18330 cc = vm_cc_new(klass, cme, vm_call_super_method);
18331 rb_obj_write((VALUE)(reg_cfp->iseq), __extension__({
18332 ;
18333 ; __typeof__((VALUE *)(&cd->cc)) unaligned_member_access_result = ((VALUE *)(&cd->cc));
18334 ; unaligned_member_access_result; }), (VALUE)(cc), "./vm_insnhelper.c", 3896);
18335 }
18336 else {
18337 cd->cc = cc = empty_cc_for_super();
18338 }
18339 }
18340 else {
18341 switch (cached_cme->def->type) {
18342 case VM_METHOD_TYPE_REFINED:
18343 case VM_METHOD_TYPE_ATTRSET:
18344 case VM_METHOD_TYPE_IVAR:
18345 vm_cc_call_set(cc, vm_call_super_method);
18346 break;
18347 default:
18348 break;
18349 }
18350 }
18351 }
18352 ((void)0);
18353 return cc;
18354}
18355static inline int
18356block_proc_is_lambda(const VALUE procval)
18357{
18358 rb_proc_t *proc;
18359 if (procval) {
18360 (((proc)) = (rb_proc_t*)((struct RData *)(((procval))))->data);
18361 return proc->is_lambda;
18362 }
18363 else {
18364 return 0;
18365 }
18366}
18367static VALUE
18368vm_yield_with_cfunc(rb_execution_context_t *ec,
18369 const struct rb_captured_block *captured,
18370 VALUE self, int argc, const VALUE *argv, int kw_splat, VALUE block_handler,
18371 const rb_callable_method_entry_t *me)
18372{
18373 int is_lambda = 0;
18374 VALUE val, arg, blockarg;
18375 int frame_flag;
18376 const struct vm_ifunc *ifunc = captured->code.ifunc;
18377 if (is_lambda) {
18378 arg = rb_ary_new_from_values(argc, argv);
18379 }
18380 else if (argc == 0) {
18381 arg = ((VALUE)RUBY_Qnil);
18382 }
18383 else {
18384 arg = argv[0];
18385 }
18386 blockarg = rb_vm_bh_to_procval(ec, block_handler);
18387 frame_flag = VM_FRAME_MAGIC_IFUNC | VM_FRAME_FLAG_CFRAME | (me ? VM_FRAME_FLAG_BMETHOD : 0);
18388 if (kw_splat) {
18389 frame_flag |= VM_FRAME_FLAG_CFRAME_KW;
18390 }
18391 vm_push_frame(ec, (const rb_iseq_t *)captured->code.ifunc,
18392 frame_flag,
18393 self,
18394 ((VALUE)((captured->ep)) | (0x01)),
18395 (VALUE)me,
18396 0, ec->cfp->sp, 0, 0);
18397 val = (*ifunc->func)(arg, (VALUE)ifunc->data, argc, argv, blockarg);
18398 rb_vm_pop_frame(ec);
18399 return val;
18400}
18401static VALUE
18402vm_yield_with_symbol(rb_execution_context_t *ec, VALUE symbol, int argc, const VALUE *argv, int kw_splat, VALUE block_handler)
18403{
18404 return rb_sym_proc_call(rb_sym2id(symbol), argc, argv, kw_splat, rb_vm_bh_to_procval(ec, block_handler));
18405}
18406static inline int
18407vm_callee_setup_block_arg_arg0_splat(rb_control_frame_t *cfp, const rb_iseq_t *iseq, VALUE *argv, VALUE ary)
18408{
18409 int i;
18410 long len = rb_array_len(ary);
18411 do { __extension__ _Static_assert(sizeof(*((cfp)->sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*((cfp)->sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*((cfp))) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*((cfp))) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&((cfp)->sp)[((iseq->body->param.lead_num))]; if ((__builtin_expect(!!(((cfp)) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
18412 for (i=0; i<len && i<iseq->body->param.lead_num; i++) {
18413 argv[i] = RARRAY_AREF(ary, i);
18414 }
18415 return i;
18416}
18417static inline VALUE
18418vm_callee_setup_block_arg_arg0_check(VALUE *argv)
18419{
18420 VALUE ary, arg0 = argv[0];
18421 ary = rb_check_array_type(arg0);
18422 ((void)0);
18423 return ary;
18424}
18425static int
18426vm_callee_setup_block_arg(rb_execution_context_t *ec, struct rb_calling_info *calling, const struct rb_callinfo *ci, const rb_iseq_t *iseq, VALUE *argv, const enum arg_setup_type arg_setup_type)
18427{
18428 if (rb_simple_iseq_p(iseq)) {
18429 rb_control_frame_t *cfp = ec->cfp;
18430 VALUE arg0;
18431 CALLER_SETUP_ARG(cfp, calling, ci);
18432 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
18433 if (arg_setup_type == arg_setup_block &&
18434 calling->argc == 1 &&
18435 iseq->body->param.flags.has_lead &&
18436 !iseq->body->param.flags.ambiguous_param0 &&
18437 !RB_NIL_P(arg0 = vm_callee_setup_block_arg_arg0_check(argv))) {
18438 calling->argc = vm_callee_setup_block_arg_arg0_splat(cfp, iseq, argv, arg0);
18439 }
18440 if (calling->argc != iseq->body->param.lead_num) {
18441 if (arg_setup_type == arg_setup_block) {
18442 if (calling->argc < iseq->body->param.lead_num) {
18443 int i;
18444 do { __extension__ _Static_assert(sizeof(*((cfp)->sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*((cfp)->sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*((cfp))) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*((cfp))) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&((cfp)->sp)[((iseq->body->param.lead_num))]; if ((__builtin_expect(!!(((cfp)) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
18445 for (i=calling->argc; i<iseq->body->param.lead_num; i++) argv[i] = ((VALUE)RUBY_Qnil);
18446 calling->argc = iseq->body->param.lead_num;
18447 }
18448 else if (calling->argc > iseq->body->param.lead_num) {
18449 calling->argc = iseq->body->param.lead_num;
18450 }
18451 }
18452 else {
18453 argument_arity_error(ec, iseq, calling->argc, iseq->body->param.lead_num, iseq->body->param.lead_num);
18454 }
18455 }
18456 return 0;
18457 }
18458 else {
18459 return setup_parameters_complex(ec, iseq, calling, ci, argv, arg_setup_type);
18460 }
18461}
18462static int
18463vm_yield_setup_args(rb_execution_context_t *ec, const rb_iseq_t *iseq, const int argc, VALUE *argv, int kw_splat, VALUE block_handler, enum arg_setup_type arg_setup_type)
18464{
18465 struct rb_calling_info calling_entry, *calling;
18466 calling = &calling_entry;
18467 calling->argc = argc;
18468 calling->block_handler = block_handler;
18469 calling->kw_splat = kw_splat;
18470 calling->recv = ((VALUE)RUBY_Qundef);
18471 struct rb_callinfo dummy_ci = (struct rb_callinfo) { .flags = RUBY_T_IMEMO | (imemo_callinfo << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4), .mid = 0, .flag = (kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0), .argc = 0, .kwarg = 0, };
18472 return vm_callee_setup_block_arg(ec, calling, &dummy_ci, iseq, argv, arg_setup_type);
18473}
18474static VALUE
18475vm_invoke_iseq_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
18476 struct rb_calling_info *calling, const struct rb_callinfo *ci,
18477 _Bool is_lambda, VALUE block_handler)
18478{
18479 const struct rb_captured_block *captured = VM_BH_TO_ISEQ_BLOCK(block_handler);
18480 const rb_iseq_t *iseq = rb_iseq_check(captured->code.iseq);
18481 const int arg_size = iseq->body->param.size;
18482 VALUE * const rsp = ((((reg_cfp)->sp))) - calling->argc;
18483 int opt_pc = vm_callee_setup_block_arg(ec, calling, ci, iseq, rsp, is_lambda ? arg_setup_method : arg_setup_block);
18484 (((reg_cfp)->sp) = (((rsp))));
18485 vm_push_frame(ec, iseq,
18486 VM_FRAME_MAGIC_BLOCK | (is_lambda ? VM_FRAME_FLAG_LAMBDA : 0),
18487 captured->self,
18488 ((VALUE)((captured->ep)) | (0x01)), 0,
18489 iseq->body->iseq_encoded + opt_pc,
18490 rsp + arg_size,
18491 iseq->body->local_table_size - arg_size, iseq->body->stack_max);
18492 return ((VALUE)RUBY_Qundef);
18493}
18494static VALUE
18495vm_invoke_symbol_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
18496 struct rb_calling_info *calling, const struct rb_callinfo *ci,
18497 __attribute__ ((__unused__)) _Bool is_lambda, VALUE block_handler)
18498{
18499 if (calling->argc < 1) {
18500 rb_raise(rb_eArgError, "no receiver given");
18501 }
18502 else {
18503 VALUE symbol = VM_BH_TO_SYMBOL(block_handler);
18504 CALLER_SETUP_ARG(reg_cfp, calling, ci);
18505 calling->recv = (*(((((reg_cfp)->sp)))-(--calling->argc)-1));
18506 return vm_call_symbol(ec, reg_cfp, calling, ci, symbol);
18507 }
18508}
18509static VALUE
18510vm_invoke_ifunc_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
18511 struct rb_calling_info *calling, const struct rb_callinfo *ci,
18512 __attribute__ ((__unused__)) _Bool is_lambda, VALUE block_handler)
18513{
18514 VALUE val;
18515 int argc;
18516 const struct rb_captured_block *captured = VM_BH_TO_IFUNC_BLOCK(block_handler);
18517 CALLER_SETUP_ARG(ec->cfp, calling, ci);
18518 CALLER_REMOVE_EMPTY_KW_SPLAT(ec->cfp, calling, ci);
18519 argc = calling->argc;
18520 val = vm_yield_with_cfunc(ec, captured, captured->self, argc, (((((reg_cfp)->sp)))-(argc)), calling->kw_splat, calling->block_handler, ((void *)0));
18521 ((((reg_cfp)->sp) -= (((argc)))));
18522 return val;
18523}
18524static VALUE
18525vm_proc_to_block_handler(VALUE procval)
18526{
18527 const struct rb_block *block = vm_proc_block(procval);
18528 switch (vm_block_type(block)) {
18529 case block_type_iseq:
18530 return VM_BH_FROM_ISEQ_BLOCK(&block->as.captured);
18531 case block_type_ifunc:
18532 return VM_BH_FROM_IFUNC_BLOCK(&block->as.captured);
18533 case block_type_symbol:
18534 return VM_BH_FROM_SYMBOL(block->as.symbol);
18535 case block_type_proc:
18536 return VM_BH_FROM_PROC(block->as.proc);
18537 }
18538 __builtin_unreachable();
18539 return ((VALUE)RUBY_Qundef);
18540}
18541static VALUE
18542vm_invoke_proc_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
18543 struct rb_calling_info *calling, const struct rb_callinfo *ci,
18544 _Bool is_lambda, VALUE block_handler)
18545{
18546 while (vm_block_handler_type(block_handler) == block_handler_type_proc) {
18547 VALUE proc = VM_BH_TO_PROC(block_handler);
18548 is_lambda = block_proc_is_lambda(proc);
18549 block_handler = vm_proc_to_block_handler(proc);
18550 }
18551 return vm_invoke_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
18552}
18553static inline VALUE
18554vm_invoke_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
18555 struct rb_calling_info *calling, const struct rb_callinfo *ci,
18556 _Bool is_lambda, VALUE block_handler)
18557{
18558 VALUE (*func)(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
18559 struct rb_calling_info *calling, const struct rb_callinfo *ci,
18560 _Bool is_lambda, VALUE block_handler);
18561 switch (vm_block_handler_type(block_handler)) {
18562 case block_handler_type_iseq: func = vm_invoke_iseq_block; break;
18563 case block_handler_type_ifunc: func = vm_invoke_ifunc_block; break;
18564 case block_handler_type_proc: func = vm_invoke_proc_block; break;
18565 case block_handler_type_symbol: func = vm_invoke_symbol_block; break;
18566 default: rb_bug("vm_invoke_block: unreachable");
18567 }
18568 return func(ec, reg_cfp, calling, ci, is_lambda, block_handler);
18569}
18570static VALUE
18571vm_make_proc_with_iseq(const rb_iseq_t *blockiseq)
18572{
18573 const rb_execution_context_t *ec = rb_current_execution_context(1);
18574 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
18575 struct rb_captured_block *captured;
18576 if (cfp == 0) {
18577 rb_bug("vm_make_proc_with_iseq: unreachable");
18578 }
18579 captured = VM_CFP_TO_CAPTURED_BLOCK(cfp);
18580 captured->code.iseq = blockiseq;
18581 return rb_vm_make_proc(ec, captured, rb_cProc);
18582}
18583static VALUE
18584vm_once_exec(VALUE iseq)
18585{
18586 VALUE proc = vm_make_proc_with_iseq((rb_iseq_t *)iseq);
18587 return rb_proc_call_with_block(proc, 0, 0, ((VALUE)RUBY_Qnil));
18588}
18589static VALUE
18590vm_once_clear(VALUE data)
18591{
18592 union iseq_inline_storage_entry *is = (union iseq_inline_storage_entry *)data;
18593 is->once.running_thread = ((void *)0);
18594 return ((VALUE)RUBY_Qnil);
18595}
18596static _Bool
18597check_respond_to_missing(VALUE obj, VALUE v)
18598{
18599 VALUE args[2];
18600 VALUE r;
18601 args[0] = obj; args[1] = ((VALUE)RUBY_Qfalse);
18602 r = rb_check_funcall(v, idRespond_to_missing, 2, args);
18603 if (r != ((VALUE)RUBY_Qundef) && RB_TEST(r)) {
18604 return 1;
18605 }
18606 else {
18607 return 0;
18608 }
18609}
18610static _Bool
18611vm_defined(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, rb_num_t op_type, VALUE obj, VALUE v)
18612{
18613 VALUE klass;
18614 enum defined_type type = (enum defined_type)op_type;
18615 switch (type) {
18616 case DEFINED_IVAR:
18617 return rb_ivar_defined((((((reg_cfp)))->self)), rb_sym2id(obj));
18618 break;
18619 case DEFINED_GVAR:
18620 return rb_gvar_defined(rb_sym2id(obj));
18621 break;
18622 case DEFINED_CVAR: {
18623 const rb_cref_t *cref = vm_get_cref(((((reg_cfp)->ep))));
18624 klass = vm_get_cvar_base(cref, (((reg_cfp))), 0);
18625 return rb_cvar_defined(klass, rb_sym2id(obj));
18626 break;
18627 }
18628 case DEFINED_CONST:
18629 case DEFINED_CONST_FROM: {
18630 _Bool allow_nil = type == DEFINED_CONST;
18631 klass = v;
18632 return vm_get_ev_const(ec, klass, rb_sym2id(obj), allow_nil, 1);
18633 break;
18634 }
18635 case DEFINED_FUNC:
18636 klass = rb_class_of(v);
18637 return rb_ec_obj_respond_to(ec, v, rb_sym2id(obj), 1);
18638 break;
18639 case DEFINED_METHOD:{
18640 VALUE klass = rb_class_of(v);
18641 const rb_method_entry_t *me = rb_method_entry_with_refinements(klass, rb_sym2id(obj), ((void *)0));
18642 if (me) {
18643 switch ((rb_method_visibility_t)(((me)->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
18644 case METHOD_VISI_PRIVATE:
18645 break;
18646 case METHOD_VISI_PROTECTED:
18647 if (!rb_obj_is_kind_of((((((reg_cfp)))->self)), rb_class_real(me->defined_class))) {
18648 break;
18649 }
18650 case METHOD_VISI_PUBLIC:
18651 return 1;
18652 break;
18653 default:
18654 rb_bug("vm_defined: unreachable: %u", (unsigned int)(rb_method_visibility_t)(((me)->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0)));
18655 }
18656 }
18657 else {
18658 return check_respond_to_missing(obj, v);
18659 }
18660 break;
18661 }
18662 case DEFINED_YIELD:
18663 if (((VM_EP_LEP(((((reg_cfp)->ep)))))[(-1)]) != 0) {
18664 return 1;
18665 }
18666 break;
18667 case DEFINED_ZSUPER:
18668 {
18669 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry((((reg_cfp))));
18670 if (me) {
18671 VALUE klass = vm_search_normal_superclass(me->defined_class);
18672 ID id = me->def->original_id;
18673 return rb_method_boundp(klass, id, 0);
18674 }
18675 }
18676 break;
18677 case DEFINED_REF:{
18678 return vm_getspecial(ec, (VM_EP_LEP(((((reg_cfp)->ep))))), ((VALUE)RUBY_Qfalse), RB_FIX2INT(obj)) != ((VALUE)RUBY_Qnil);
18679 break;
18680 }
18681 default:
18682 rb_bug("unimplemented defined? type (VM)");
18683 break;
18684 }
18685 return 0;
18686}static inline
18687_Bool
18688rb_vm_defined(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, rb_num_t op_type, VALUE obj, VALUE v)
18689{
18690 return vm_defined(ec, reg_cfp, op_type, obj, v);
18691}
18692static const VALUE *
18693vm_get_ep(const VALUE *const reg_ep, rb_num_t lv)
18694{
18695 rb_num_t i;
18696 const VALUE *ep = reg_ep;
18697 for (i = 0; i < lv; i++) {
18698 ep = ((VALUE *)((ep)[(-1)] & ~0x03));
18699 }
18700 return ep;
18701}
18702static VALUE
18703vm_get_special_object(const VALUE *const reg_ep,
18704 enum vm_special_object_type type)
18705{
18706 switch (type) {
18707 case VM_SPECIAL_OBJECT_VMCORE:
18708 return rb_mRubyVMFrozenCore;
18709 case VM_SPECIAL_OBJECT_CBASE:
18710 return vm_get_cbase(reg_ep);
18711 case VM_SPECIAL_OBJECT_CONST_BASE:
18712 return vm_get_const_base(reg_ep);
18713 default:
18714 rb_bug("putspecialobject insn: unknown value_type %d", type);
18715 }
18716}
18717static VALUE
18718vm_concat_array(VALUE ary1, VALUE ary2st)
18719{
18720 const VALUE ary2 = ary2st;
18721 VALUE tmp1 = rb_check_to_array(ary1);
18722 VALUE tmp2 = rb_check_to_array(ary2);
18723 if (RB_NIL_P(tmp1)) {
18724 tmp1 = __extension__ ({ const VALUE args_to_new_ary[] = {ary1}; if (__builtin_constant_p(1)) { __extension__ _Static_assert(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))) == (1), "rb_ary_new_from_args" ": " "numberof(args_to_new_ary) == (1)"); } rb_ary_new_from_values(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))), args_to_new_ary); });
18725 }
18726 if (RB_NIL_P(tmp2)) {
18727 tmp2 = __extension__ ({ const VALUE args_to_new_ary[] = {ary2}; if (__builtin_constant_p(1)) { __extension__ _Static_assert(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))) == (1), "rb_ary_new_from_args" ": " "numberof(args_to_new_ary) == (1)"); } rb_ary_new_from_values(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))), args_to_new_ary); });
18728 }
18729 if (tmp1 == ary1) {
18730 tmp1 = rb_ary_dup(ary1);
18731 }
18732 return rb_ary_concat(tmp1, tmp2);
18733}
18734static VALUE
18735vm_splat_array(VALUE flag, VALUE ary)
18736{
18737 VALUE tmp = rb_check_to_array(ary);
18738 if (RB_NIL_P(tmp)) {
18739 return __extension__ ({ const VALUE args_to_new_ary[] = {ary}; if (__builtin_constant_p(1)) { __extension__ _Static_assert(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))) == (1), "rb_ary_new_from_args" ": " "numberof(args_to_new_ary) == (1)"); } rb_ary_new_from_values(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))), args_to_new_ary); });
18740 }
18741 else if (RB_TEST(flag)) {
18742 return rb_ary_dup(tmp);
18743 }
18744 else {
18745 return tmp;
18746 }
18747}static inline
18748VALUE
18749rb_vm_splat_array(VALUE flag, VALUE ary)
18750{
18751 return vm_splat_array(flag, ary);
18752}
18753static VALUE
18754vm_check_match(rb_execution_context_t *ec, VALUE target, VALUE pattern, rb_num_t flag)
18755{
18756 enum vm_check_match_type type = ((int)flag) & 0x03;
18757 if (flag & 0x04) {
18758 long i;
18759 const long n = rb_array_len(pattern);
18760 for (i = 0; i < n; i++) {
18761 VALUE v = RARRAY_AREF(pattern, i);
18762 VALUE c = check_match(ec, v, target, type);
18763 if (RB_TEST(c)) {
18764 return c;
18765 }
18766 }
18767 return ((VALUE)RUBY_Qfalse);
18768 }
18769 else {
18770 return check_match(ec, pattern, target, type);
18771 }
18772}
18773static VALUE
18774vm_check_keyword(lindex_t bits, lindex_t idx, const VALUE *ep)
18775{
18776 const VALUE kw_bits = *(ep - bits);
18777 if (RB_FIXNUM_P(kw_bits)) {
18778 unsigned int b = (unsigned int)rb_fix2ulong(kw_bits);
18779 if ((idx < (32-1)) && (b & (0x01 << idx)))
18780 return ((VALUE)RUBY_Qfalse);
18781 }
18782 else {
18783 ((void)0);
18784 if (rb_hash_has_key(kw_bits, __builtin_choose_expr( __builtin_constant_p(idx), ((VALUE)(idx)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(idx)))) return ((VALUE)RUBY_Qfalse);
18785 }
18786 return ((VALUE)RUBY_Qtrue);
18787}
18788static void
18789vm_dtrace(rb_event_flag_t flag, rb_execution_context_t *ec)
18790{
18791 if (0 ||
18792 0 ||
18793 0 ||
18794 0) {
18795 switch (flag) {
18796 case 0x0008:
18797 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, 0, 0, &args)) { do {} while (0); } } } while (0);
18798 return;
18799 case 0x0020:
18800 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, 0, 0, &args)) { do {} while (0); } } } while (0);
18801 return;
18802 case 0x0010:
18803 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, 0, 0, &args)) { do {} while (0); } } } while (0);
18804 return;
18805 case 0x0040:
18806 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, 0, 0, &args)) { do {} while (0); } } } while (0);
18807 return;
18808 }
18809 }
18810}
18811static VALUE
18812vm_const_get_under(ID id, rb_num_t flags, VALUE cbase)
18813{
18814 VALUE ns;
18815 if ((ns = vm_search_const_defined_class(cbase, id)) == 0) {
18816 return ns;
18817 }
18818 else if (((flags) & 0x08)) {
18819 return rb_public_const_get_at(ns, id);
18820 }
18821 else {
18822 return rb_const_get_at(ns, id);
18823 }
18824}
18825static VALUE
18826vm_check_if_class(ID id, rb_num_t flags, VALUE super, VALUE klass)
18827{
18828 if (!RB_TYPE_P(klass, RUBY_T_CLASS)) {
18829 return 0;
18830 }
18831 else if (((flags) & 0x10)) {
18832 VALUE tmp = rb_class_real(RCLASS_SUPER(klass));
18833 if (tmp != super) {
18834 rb_raise(rb_eTypeError,
18835 "superclass mismatch for class %""l""i" "\v""",
18836 rb_id2str(id));
18837 }
18838 else {
18839 return klass;
18840 }
18841 }
18842 else {
18843 return klass;
18844 }
18845}
18846static VALUE
18847vm_check_if_module(ID id, VALUE mod)
18848{
18849 if (!RB_TYPE_P(mod, RUBY_T_MODULE)) {
18850 return 0;
18851 }
18852 else {
18853 return mod;
18854 }
18855}
18856static VALUE
18857declare_under(ID id, VALUE cbase, VALUE c)
18858{
18859 rb_set_class_path_string(c, cbase, rb_id2str(id));
18860 rb_const_set(cbase, id, c);
18861 return c;
18862}
18863static VALUE
18864vm_declare_class(ID id, rb_num_t flags, VALUE cbase, VALUE super)
18865{
18866 VALUE s = ((flags) & 0x10) ? super : rb_cObject;
18867 VALUE c = declare_under(id, cbase, rb_define_class_id(id, s));
18868 rb_define_alloc_func(c, rb_get_alloc_func(c));
18869 rb_class_inherited(s, c);
18870 return c;
18871}
18872static VALUE
18873vm_declare_module(ID id, VALUE cbase)
18874{
18875 return declare_under(id, cbase, rb_module_new());
18876}
18877__attribute__((__noreturn__)) static void unmatched_redefinition(const char *type, VALUE cbase, ID id, VALUE old);
18878static void
18879unmatched_redefinition(const char *type, VALUE cbase, ID id, VALUE old)
18880{
18881 VALUE name = rb_id2str(id);
18882 VALUE message = rb_sprintf("%""l""i" "\v"" is not a %s",
18883 name, type);
18884 VALUE location = rb_const_source_location_at(cbase, id);
18885 if (!RB_NIL_P(location)) {
18886 rb_str_catf(message, "\n%""l""i" "\v"":%""l""i" "\v"":"
18887 " previous definition of %""l""i" "\v"" was here",
18888 rb_ary_entry(location, 0), rb_ary_entry(location, 1), name);
18889 }
18890 rb_exc_raise(rb_exc_new_str(rb_eTypeError, message));
18891}
18892static VALUE
18893vm_define_class(ID id, rb_num_t flags, VALUE cbase, VALUE super)
18894{
18895 VALUE klass;
18896 if (((flags) & 0x10) && !RB_TYPE_P(super, RUBY_T_CLASS)) {
18897 rb_raise(rb_eTypeError,
18898 "superclass must be an instance of Class (given an instance of %""l""i" "\v"")",
18899 rb_obj_class(super));
18900 }
18901 vm_check_if_namespace(cbase);
18902 rb_autoload_load(cbase, id);
18903 if ((klass = vm_const_get_under(id, flags, cbase)) != 0) {
18904 if (!vm_check_if_class(id, flags, super, klass))
18905 unmatched_redefinition("class", cbase, id, klass);
18906 return klass;
18907 }
18908 else {
18909 return vm_declare_class(id, flags, cbase, super);
18910 }
18911}
18912static VALUE
18913vm_define_module(ID id, rb_num_t flags, VALUE cbase)
18914{
18915 VALUE mod;
18916 vm_check_if_namespace(cbase);
18917 if ((mod = vm_const_get_under(id, flags, cbase)) != 0) {
18918 if (!vm_check_if_module(id, mod))
18919 unmatched_redefinition("module", cbase, id, mod);
18920 return mod;
18921 }
18922 else {
18923 return vm_declare_module(id, cbase);
18924 }
18925}
18926static VALUE
18927vm_find_or_create_class_by_id(ID id,
18928 rb_num_t flags,
18929 VALUE cbase,
18930 VALUE super)
18931{
18932 rb_vm_defineclass_type_t type = ((rb_vm_defineclass_type_t)(flags) & VM_DEFINECLASS_TYPE_MASK);
18933 switch (type) {
18934 case VM_DEFINECLASS_TYPE_CLASS:
18935 return vm_define_class(id, flags, cbase, super);
18936 case VM_DEFINECLASS_TYPE_SINGLETON_CLASS:
18937 return rb_singleton_class(cbase);
18938 case VM_DEFINECLASS_TYPE_MODULE:
18939 return vm_define_module(id, flags, cbase);
18940 default:
18941 rb_bug("unknown defineclass type: %d", (int)type);
18942 }
18943}
18944static rb_method_visibility_t
18945vm_scope_visibility_get(const rb_execution_context_t *ec)
18946{
18947 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
18948 if (!vm_env_cref_by_cref(cfp->ep)) {
18949 return METHOD_VISI_PUBLIC;
18950 }
18951 else {
18952 return CREF_SCOPE_VISI(vm_ec_cref(ec))->method_visi;
18953 }
18954}
18955static int
18956vm_scope_module_func_check(const rb_execution_context_t *ec)
18957{
18958 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
18959 if (!vm_env_cref_by_cref(cfp->ep)) {
18960 return 0;
18961 }
18962 else {
18963 return CREF_SCOPE_VISI(vm_ec_cref(ec))->module_func;
18964 }
18965}
18966static void
18967vm_define_method(const rb_execution_context_t *ec, VALUE obj, ID id, VALUE iseqval, int is_singleton)
18968{
18969 VALUE klass;
18970 rb_method_visibility_t visi;
18971 rb_cref_t *cref = vm_ec_cref(ec);
18972 if (is_singleton) {
18973 klass = rb_singleton_class(obj);
18974 visi = METHOD_VISI_PUBLIC;
18975 }
18976 else {
18977 klass = CREF_CLASS_FOR_DEFINITION(cref);
18978 visi = vm_scope_visibility_get(ec);
18979 }
18980 if (RB_NIL_P(klass)) {
18981 rb_raise(rb_eTypeError, "no class/module to add method");
18982 }
18983 rb_add_method_iseq(klass, id, (const rb_iseq_t *)iseqval, cref, visi);
18984 if (!is_singleton && vm_scope_module_func_check(ec)) {
18985 klass = rb_singleton_class(klass);
18986 rb_add_method_iseq(klass, id, (const rb_iseq_t *)iseqval, cref, METHOD_VISI_PUBLIC);
18987 }
18988}
18989static VALUE
18990vm_invokeblock_i(struct rb_execution_context_struct *ec,
18991 struct rb_control_frame_struct *reg_cfp,
18992 struct rb_calling_info *calling)
18993{
18994 const struct rb_callinfo *ci = calling->ci;
18995 VALUE block_handler = VM_CF_BLOCK_HANDLER((((reg_cfp))));
18996 if (block_handler == 0) {
18997 rb_vm_localjump_error("no block given (yield)", ((VALUE)RUBY_Qnil), 0);
18998 }
18999 else {
19000 return vm_invoke_block(ec, (((reg_cfp))), calling, ci, 0, block_handler);
19001 }
19002}
19003static const struct rb_callcache *
19004vm_search_method_wrap(const struct rb_control_frame_struct *reg_cfp, struct rb_call_data *cd, VALUE recv)
19005{
19006 return vm_search_method((VALUE)reg_cfp->iseq, cd, recv);
19007}
19008static const struct rb_callcache *
19009vm_search_invokeblock(const struct rb_control_frame_struct *reg_cfp, struct rb_call_data *cd, VALUE recv)
19010{
19011 static const struct rb_callcache cc = {
19012 .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4),
19013 .klass = 0,
19014 .cme_ = 0,
19015 .call_ = vm_invokeblock_i,
19016 .aux_ = {0},
19017 };
19018 return &cc;
19019}
19020static
19021VALUE
19022vm_sendish(
19023 struct rb_execution_context_struct *ec,
19024 struct rb_control_frame_struct *reg_cfp,
19025 struct rb_call_data *cd,
19026 VALUE block_handler,
19027 const struct rb_callcache *(*method_explorer)(const struct rb_control_frame_struct *cfp, struct rb_call_data *cd, VALUE recv)
19028) {
19029 VALUE val = ((VALUE)RUBY_Qundef);
19030 const struct rb_callinfo *ci = cd->ci;
19031 const struct rb_callcache *cc;
19032 int argc = vm_ci_argc(ci);
19033 VALUE recv = (*(((((reg_cfp)->sp)))-(argc)-1));
19034 struct rb_calling_info calling = {
19035 .block_handler = block_handler,
19036 .kw_splat = (vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_bit)) > 0,
19037 .recv = recv,
19038 .argc = argc,
19039 .ci = ci,
19040 };
19041 calling.cc = cc = method_explorer((((reg_cfp))), cd, recv);
19042 val = vm_cc_call(cc)(ec, (((reg_cfp))), &calling);
19043 if (val != ((VALUE)RUBY_Qundef)) {
19044 return val;
19045 }
19046 else {
19047 do { (reg_cfp) = ec->cfp; } while (0);
19048 }
19049 if (((((reg_cfp)))->iseq)->body->catch_except_p) {
19050 VM_ENV_FLAGS_SET(((((reg_cfp)->ep))), VM_FRAME_FLAG_FINISH);
19051 return rb_vm_exec(ec, 1);
19052 }
19053 else if ((val = mjit_exec(ec)) == ((VALUE)RUBY_Qundef)) {
19054 VM_ENV_FLAGS_SET(((((reg_cfp)->ep))), VM_FRAME_FLAG_FINISH);
19055 return rb_vm_exec(ec, 0);
19056 }
19057 else {
19058 return val;
19059 }
19060}
19061VALUE rb_nil_to_s(VALUE);
19062VALUE rb_true_to_s(VALUE);
19063VALUE rb_false_to_s(VALUE);
19064VALUE rb_int_to_s(int argc, VALUE *argv, VALUE x);
19065VALUE rb_fix_to_s(VALUE);
19066VALUE rb_mod_to_s(VALUE);
19067VALUE rb_mod_name(VALUE);
19068static VALUE
19069vm_objtostring(const rb_iseq_t *iseq, VALUE recv, CALL_DATA cd)
19070{
19071 const struct rb_callcache *cc = vm_search_method((VALUE)iseq, cd, recv);
19072 switch (((int)rb_type(recv))) {
19073 case RUBY_T_STRING:
19074 return recv;
19075 case RUBY_T_SYMBOL:
19076 if (check_cfunc(vm_cc_cme(cc), rb_sym_to_s)) {
19077 return rb_sym2str(recv);
19078 }
19079 break;
19080 case RUBY_T_MODULE:
19081 case RUBY_T_CLASS:
19082 if (check_cfunc(vm_cc_cme(cc), rb_mod_to_s)) {
19083 VALUE val = rb_mod_name(recv);
19084 if (val == ((VALUE)RUBY_Qnil)) {
19085 val = rb_mod_to_s(recv);
19086 }
19087 return val;
19088 }
19089 break;
19090 case RUBY_T_NIL:
19091 if (check_cfunc(vm_cc_cme(cc), rb_nil_to_s)) {
19092 return rb_nil_to_s(recv);
19093 }
19094 break;
19095 case RUBY_T_TRUE:
19096 if (check_cfunc(vm_cc_cme(cc), rb_true_to_s)) {
19097 return rb_true_to_s(recv);
19098 }
19099 break;
19100 case RUBY_T_FALSE:
19101 if (check_cfunc(vm_cc_cme(cc), rb_false_to_s)) {
19102 return rb_false_to_s(recv);
19103 }
19104 break;
19105 case RUBY_T_FIXNUM:
19106 if (check_cfunc(vm_cc_cme(cc), rb_int_to_s)) {
19107 return rb_fix_to_s(recv);
19108 }
19109 break;
19110 }
19111 return ((VALUE)RUBY_Qundef);
19112}
19113static VALUE
19114vm_opt_str_freeze(VALUE str, int bop, ID id)
19115{
19116 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(bop)]&((1 << 2))) == 0), 1)))) {
19117 return str;
19118 }
19119 else {
19120 return ((VALUE)RUBY_Qundef);
19121 }
19122}
19123static VALUE
19124vm_opt_newarray_max(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
19125{
19126 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MAX)]&((1 << 3))) == 0), 1)))) {
19127 if (num == 0) {
19128 return ((VALUE)RUBY_Qnil);
19129 }
19130 else {
19131 struct cmp_opt_data cmp_opt = { 0, 0 };
19132 VALUE result = *ptr;
19133 rb_snum_t i = num - 1;
19134 while (i-- > 0) {
19135 const VALUE v = *++ptr;
19136 if (((RB_FIXNUM_P(v) && RB_FIXNUM_P(result) && (((cmp_opt).opt_inited & (1U << cmp_opt_Integer)) ? ((cmp_opt).opt_methods & (1U << cmp_opt_Integer)) : (((cmp_opt).opt_inited |= (1U << cmp_opt_Integer)), rb_method_basic_definition_p(rb_cInteger, idCmp) && ((cmp_opt).opt_methods |= (1U << cmp_opt_Integer))))) ? (((long)v > (long)result) ? 1 : ((long)v < (long)result) ? -1 : 0) : ((RB_TYPE_P((v), RUBY_T_STRING) && rb_class_of(v) == rb_cString) && (RB_TYPE_P((result), RUBY_T_STRING) && rb_class_of(result) == rb_cString) && (((cmp_opt).opt_inited & (1U << cmp_opt_String)) ? ((cmp_opt).opt_methods & (1U << cmp_opt_String)) : (((cmp_opt).opt_inited |= (1U << cmp_opt_String)), rb_method_basic_definition_p(rb_cString, idCmp) && ((cmp_opt).opt_methods |= (1U << cmp_opt_String))))) ? rb_str_cmp(v, result) : (RB_FLOAT_TYPE_P(v) && RB_FLOAT_TYPE_P(result) && (((cmp_opt).opt_inited & (1U << cmp_opt_Float)) ? ((cmp_opt).opt_methods & (1U << cmp_opt_Float)) : (((cmp_opt).opt_inited |= (1U << cmp_opt_Float)), rb_method_basic_definition_p(rb_cFloat, idCmp) && ((cmp_opt).opt_methods |= (1U << cmp_opt_Float))))) ? rb_float_cmp(v, result) : rb_cmpint(rb_funcallv(v, idCmp, 1, &result), v, result)) > 0) {
19137 result = v;
19138 }
19139 }
19140 return result;
19141 }
19142 }
19143 else {
19144 return rb_vm_call_with_refinements(ec, rb_ary_new_from_values(num, ptr), idMax, 0, ((void *)0), 0);
19145 }
19146}
19147static VALUE
19148vm_opt_newarray_min(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
19149{
19150 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MIN)]&((1 << 3))) == 0), 1)))) {
19151 if (num == 0) {
19152 return ((VALUE)RUBY_Qnil);
19153 }
19154 else {
19155 struct cmp_opt_data cmp_opt = { 0, 0 };
19156 VALUE result = *ptr;
19157 rb_snum_t i = num - 1;
19158 while (i-- > 0) {
19159 const VALUE v = *++ptr;
19160 if (((RB_FIXNUM_P(v) && RB_FIXNUM_P(result) && (((cmp_opt).opt_inited & (1U << cmp_opt_Integer)) ? ((cmp_opt).opt_methods & (1U << cmp_opt_Integer)) : (((cmp_opt).opt_inited |= (1U << cmp_opt_Integer)), rb_method_basic_definition_p(rb_cInteger, idCmp) && ((cmp_opt).opt_methods |= (1U << cmp_opt_Integer))))) ? (((long)v > (long)result) ? 1 : ((long)v < (long)result) ? -1 : 0) : ((RB_TYPE_P((v), RUBY_T_STRING) && rb_class_of(v) == rb_cString) && (RB_TYPE_P((result), RUBY_T_STRING) && rb_class_of(result) == rb_cString) && (((cmp_opt).opt_inited & (1U << cmp_opt_String)) ? ((cmp_opt).opt_methods & (1U << cmp_opt_String)) : (((cmp_opt).opt_inited |= (1U << cmp_opt_String)), rb_method_basic_definition_p(rb_cString, idCmp) && ((cmp_opt).opt_methods |= (1U << cmp_opt_String))))) ? rb_str_cmp(v, result) : (RB_FLOAT_TYPE_P(v) && RB_FLOAT_TYPE_P(result) && (((cmp_opt).opt_inited & (1U << cmp_opt_Float)) ? ((cmp_opt).opt_methods & (1U << cmp_opt_Float)) : (((cmp_opt).opt_inited |= (1U << cmp_opt_Float)), rb_method_basic_definition_p(rb_cFloat, idCmp) && ((cmp_opt).opt_methods |= (1U << cmp_opt_Float))))) ? rb_float_cmp(v, result) : rb_cmpint(rb_funcallv(v, idCmp, 1, &result), v, result)) < 0) {
19161 result = v;
19162 }
19163 }
19164 return result;
19165 }
19166 }
19167 else {
19168 return rb_vm_call_with_refinements(ec, rb_ary_new_from_values(num, ptr), idMin, 0, ((void *)0), 0);
19169 }
19170}
19171static inline _Bool
19172vm_inlined_ic_hit_p(VALUE flags, VALUE value, const rb_cref_t *ic_cref, rb_serial_t ic_serial, const VALUE *reg_ep)
19173{
19174 if (ic_serial == (ruby_vm_global_constant_state) &&
19175 ((flags & ((VALUE)RUBY_FL_USER4)) || rb_ractor_main_p())) {
19176 ((void)0);
19177 return (ic_cref == ((void *)0) ||
19178 ic_cref == vm_get_cref(reg_ep));
19179 }
19180 return 0;
19181}
19182static _Bool
19183vm_ic_hit_p(const struct iseq_inline_constant_cache_entry *ice, const VALUE *reg_ep)
19184{
19185 ((void)0);
19186 return vm_inlined_ic_hit_p(ice->flags, ice->value, ice->ic_cref, (ice)->ic_serial.raw, reg_ep);
19187}static inline
19188_Bool
19189rb_vm_ic_hit_p(IC ic, const VALUE *reg_ep)
19190{
19191 return ic->entry && vm_ic_hit_p(ic->entry, reg_ep);
19192}
19193COLDFUNC static void
19194vm_ic_update(const rb_iseq_t *iseq, IC ic, VALUE val, const VALUE *reg_ep) {
19195 struct iseq_inline_constant_cache_entry *ice = (struct iseq_inline_constant_cache_entry *)rb_imemo_new(imemo_constcache, 0, 0, 0, 0);
19196 rb_obj_write((VALUE)(ice), __extension__({
19197 ;
19198 ; __typeof__((VALUE *)(&ice->value)) unaligned_member_access_result = ((VALUE *)(&ice->value));
19199 ; unaligned_member_access_result; }), (VALUE)(val), "./vm_insnhelper.c", 4963);
19200 ice->ic_cref = vm_get_const_key_cref(reg_ep);
19201 (ice)->ic_serial.raw = ((ruby_vm_global_constant_state) - ruby_vm_const_missing_count);
19202 if (rb_ractor_shareable_p(val)) ice->flags |= ((VALUE)RUBY_FL_USER4);
19203 ruby_vm_const_missing_count = 0;
19204 rb_obj_write((VALUE)(iseq), __extension__({
19205 ;
19206 ; __typeof__((VALUE *)(&ic->entry)) unaligned_member_access_result = ((VALUE *)(&ic->entry));
19207 ; unaligned_member_access_result; }), (VALUE)(ice), "./vm_insnhelper.c", 4968);
19208}
19209static VALUE
19210vm_once_dispatch(rb_execution_context_t *ec, ISEQ iseq, ISE is)
19211{
19212 rb_thread_t *th = rb_ec_thread_ptr(ec);
19213 rb_thread_t *const RUNNING_THREAD_ONCE_DONE = (rb_thread_t *)(0x1);
19214 again:
19215 if (is->once.running_thread == RUNNING_THREAD_ONCE_DONE) {
19216 return is->once.value;
19217 }
19218 else if (is->once.running_thread == ((void *)0)) {
19219 VALUE val;
19220 is->once.running_thread = th;
19221 val = rb_ensure(vm_once_exec, (VALUE)iseq, vm_once_clear, (VALUE)is);
19222 rb_obj_write((VALUE)(ec->cfp->iseq), __extension__({
19223;
19224; __typeof__((VALUE *)(&is->once.value)) unaligned_member_access_result = ((VALUE *)(&is->once.value));
19225; unaligned_member_access_result; }), (VALUE)(val), "./vm_insnhelper.c", 4990);
19226 is->once.running_thread = RUNNING_THREAD_ONCE_DONE;
19227 return val;
19228 }
19229 else if (is->once.running_thread == th) {
19230 return vm_once_exec((VALUE)iseq);
19231 }
19232 else {
19233 rb_vm_check_ints(ec);
19234 rb_thread_schedule();
19235 goto again;
19236 }
19237}
19238static OFFSET
19239vm_case_dispatch(CDHASH hash, OFFSET else_offset, VALUE key)
19240{
19241 switch (__extension__({ VALUE arg_obj = (key); RB_SPECIAL_CONST_P(arg_obj) ? -1 : (int)RB_BUILTIN_TYPE(arg_obj); })) {
19242 case -1:
19243 case RUBY_T_FLOAT:
19244 case RUBY_T_SYMBOL:
19245 case RUBY_T_BIGNUM:
19246 case RUBY_T_STRING:
19247 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQQ)]&((1 << 6) | (1 << 0) | (1 << 1) | (1 << 9) | (1 << 10) | (1 << 11) | (1 << 2))) == 0), 1)))) {
19248 st_data_t val;
19249 if (RB_FLOAT_TYPE_P(key)) {
19250 double kval = rb_float_value_inline(key);
19251 if (!__builtin_isinf_sign (kval) && modf(kval, &kval) == 0.0) {
19252 key = (((kval) < (0x7fffffffffffffffL / 2) + 1) && ((kval) >= ((-0x7fffffffffffffffL - 1L) / 2))) ? RB_INT2FIX((long)kval) : rb_dbl2big(kval);
19253 }
19254 }
19255 if (rb_hash_stlike_lookup(hash, key, &val)) {
19256 return rb_fix2long((VALUE)val);
19257 }
19258 else {
19259 return else_offset;
19260 }
19261 }
19262 }
19263 return 0;
19264}
19265__attribute__((__noreturn__)) static void vm_stack_consistency_error(const rb_execution_context_t *ec, const rb_control_frame_t *, const VALUE *);
19266static void
19267vm_stack_consistency_error(const rb_execution_context_t *ec,
19268 const rb_control_frame_t *cfp,
19269 const VALUE *bp)
19270{
19271 const ptrdiff_t nsp = ((cfp->sp) - (ec)->vm_stack);
19272 const ptrdiff_t nbp = ((bp) - (ec)->vm_stack);
19273 static const char stack_consistency_error[] =
19274 "Stack consistency error (sp: %""t""d"", bp: %""t""d"")";
19275 VALUE mesg = rb_sprintf(stack_consistency_error, nsp, nbp);
19276 ((__builtin_constant_p("\n") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), ("\n")));
19277 rb_str_append(mesg, rb_iseq_disasm(cfp->iseq));
19278 rb_exc_fatal(rb_exc_new_str(rb_eFatal, mesg));
19279}
19280ALWAYS_INLINE(static inline VALUE
19281vm_opt_plus(VALUE recv, VALUE obj));
19282static inline VALUE
19283vm_opt_plus(VALUE recv, VALUE obj) {
19284 if (FIXNUM_2_P(recv, obj) &&
19285 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 0))) == 0), 1)))) {
19286 return rb_fix_plus_fix(recv, obj);
19287 }
19288 else if (FLONUM_2_P(recv, obj) &&
19289 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 1))) == 0), 1)))) {
19290 return rb_float_new_inline(rb_float_value_inline(recv) + rb_float_value_inline(obj));
19291 }
19292 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
19293 return ((VALUE)RUBY_Qundef);
19294 }
19295 else if (RBASIC_CLASS(recv) == rb_cFloat &&
19296 RBASIC_CLASS(obj) == rb_cFloat &&
19297 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 1))) == 0), 1)))) {
19298 return rb_float_new_inline(rb_float_value_inline(recv) + rb_float_value_inline(obj));
19299 }
19300 else if (RBASIC_CLASS(recv) == rb_cString &&
19301 RBASIC_CLASS(obj) == rb_cString &&
19302 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 2))) == 0), 1)))) {
19303 return rb_str_opt_plus(recv, obj);
19304 }
19305 else if (RBASIC_CLASS(recv) == rb_cArray &&
19306 RBASIC_CLASS(obj) == rb_cArray &&
19307 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 3))) == 0), 1)))) {
19308 return rb_ary_plus(recv, obj);
19309 }
19310 else {
19311 return ((VALUE)RUBY_Qundef);
19312 }
19313}
19314ALWAYS_INLINE(static inline VALUE
19315vm_opt_minus(VALUE recv, VALUE obj));
19316static inline VALUE
19317vm_opt_minus(VALUE recv, VALUE obj) {
19318 if (FIXNUM_2_P(recv, obj) &&
19319 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MINUS)]&((1 << 0))) == 0), 1)))) {
19320 return rb_fix_minus_fix(recv, obj);
19321 }
19322 else if (FLONUM_2_P(recv, obj) &&
19323 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MINUS)]&((1 << 1))) == 0), 1)))) {
19324 return rb_float_new_inline(rb_float_value_inline(recv) - rb_float_value_inline(obj));
19325 }
19326 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
19327 return ((VALUE)RUBY_Qundef);
19328 }
19329 else if (RBASIC_CLASS(recv) == rb_cFloat &&
19330 RBASIC_CLASS(obj) == rb_cFloat &&
19331 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MINUS)]&((1 << 1))) == 0), 1)))) {
19332 return rb_float_new_inline(rb_float_value_inline(recv) - rb_float_value_inline(obj));
19333 }
19334 else {
19335 return ((VALUE)RUBY_Qundef);
19336 }
19337}
19338ALWAYS_INLINE(static inline VALUE
19339vm_opt_mult(VALUE recv, VALUE obj));
19340static inline VALUE
19341vm_opt_mult(VALUE recv, VALUE obj) {
19342 if (FIXNUM_2_P(recv, obj) &&
19343 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MULT)]&((1 << 0))) == 0), 1)))) {
19344 return rb_fix_mul_fix(recv, obj);
19345 }
19346 else if (FLONUM_2_P(recv, obj) &&
19347 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MULT)]&((1 << 1))) == 0), 1)))) {
19348 return rb_float_new_inline(rb_float_value_inline(recv) * rb_float_value_inline(obj));
19349 }
19350 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
19351 return ((VALUE)RUBY_Qundef);
19352 }
19353 else if (RBASIC_CLASS(recv) == rb_cFloat &&
19354 RBASIC_CLASS(obj) == rb_cFloat &&
19355 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MULT)]&((1 << 1))) == 0), 1)))) {
19356 return rb_float_new_inline(rb_float_value_inline(recv) * rb_float_value_inline(obj));
19357 }
19358 else {
19359 return ((VALUE)RUBY_Qundef);
19360 }
19361}
19362ALWAYS_INLINE(static inline VALUE
19363vm_opt_div(VALUE recv, VALUE obj));
19364static inline VALUE
19365vm_opt_div(VALUE recv, VALUE obj) {
19366 if (FIXNUM_2_P(recv, obj) &&
19367 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_DIV)]&((1 << 0))) == 0), 1)))) {
19368 return (rb_fix2long(obj) == 0) ? ((VALUE)RUBY_Qundef) : rb_fix_div_fix(recv, obj);
19369 }
19370 else if (FLONUM_2_P(recv, obj) &&
19371 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_DIV)]&((1 << 1))) == 0), 1)))) {
19372 return rb_flo_div_flo(recv, obj);
19373 }
19374 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
19375 return ((VALUE)RUBY_Qundef);
19376 }
19377 else if (RBASIC_CLASS(recv) == rb_cFloat &&
19378 RBASIC_CLASS(obj) == rb_cFloat &&
19379 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_DIV)]&((1 << 1))) == 0), 1)))) {
19380 return rb_flo_div_flo(recv, obj);
19381 }
19382 else {
19383 return ((VALUE)RUBY_Qundef);
19384 }
19385}
19386ALWAYS_INLINE(static inline VALUE
19387vm_opt_mod(VALUE recv, VALUE obj));
19388static inline VALUE
19389vm_opt_mod(VALUE recv, VALUE obj) {
19390 if (FIXNUM_2_P(recv, obj) &&
19391 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MOD)]&((1 << 0))) == 0), 1)))) {
19392 return (rb_fix2long(obj) == 0) ? ((VALUE)RUBY_Qundef) : rb_fix_mod_fix(recv, obj);
19393 }
19394 else if (FLONUM_2_P(recv, obj) &&
19395 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MOD)]&((1 << 1))) == 0), 1)))) {
19396 return rb_float_new_inline(ruby_float_mod(rb_float_value_inline(recv), rb_float_value_inline(obj)));
19397 }
19398 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
19399 return ((VALUE)RUBY_Qundef);
19400 }
19401 else if (RBASIC_CLASS(recv) == rb_cFloat &&
19402 RBASIC_CLASS(obj) == rb_cFloat &&
19403 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MOD)]&((1 << 1))) == 0), 1)))) {
19404 return rb_float_new_inline(ruby_float_mod(rb_float_value_inline(recv), rb_float_value_inline(obj)));
19405 }
19406 else {
19407 return ((VALUE)RUBY_Qundef);
19408 }
19409}static inline
19410VALUE
19411rb_vm_opt_mod(VALUE recv, VALUE obj)
19412{
19413 return vm_opt_mod(recv, obj);
19414}
19415ALWAYS_INLINE(static inline VALUE
19416vm_opt_neq(const rb_iseq_t *iseq, CALL_DATA cd, CALL_DATA cd_eq, VALUE recv, VALUE obj));
19417static inline VALUE
19418vm_opt_neq(const rb_iseq_t *iseq, CALL_DATA cd, CALL_DATA cd_eq, VALUE recv, VALUE obj) {
19419 if (vm_method_cfunc_is(iseq, cd, recv, rb_obj_not_equal)) {
19420 VALUE val = opt_equality(iseq, recv, obj, cd_eq);
19421 if (val != ((VALUE)RUBY_Qundef)) {
19422 return RB_TEST(val) ? ((VALUE)RUBY_Qfalse) : ((VALUE)RUBY_Qtrue);
19423 }
19424 }
19425 return ((VALUE)RUBY_Qundef);
19426}
19427ALWAYS_INLINE(static inline VALUE
19428vm_opt_lt(VALUE recv, VALUE obj));
19429static inline VALUE
19430vm_opt_lt(VALUE recv, VALUE obj) {
19431 if (FIXNUM_2_P(recv, obj) &&
19432 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LT)]&((1 << 0))) == 0), 1)))) {
19433 return (((long)recv < (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
19434 }
19435 else if (FLONUM_2_P(recv, obj) &&
19436 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LT)]&((1 << 1))) == 0), 1)))) {
19437 return ((rb_float_value_inline(recv) < rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
19438 }
19439 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
19440 return ((VALUE)RUBY_Qundef);
19441 }
19442 else if (RBASIC_CLASS(recv) == rb_cFloat &&
19443 RBASIC_CLASS(obj) == rb_cFloat &&
19444 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LT)]&((1 << 1))) == 0), 1)))) {
19445 ;
19446 return ((rb_float_value_inline(recv) < rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
19447 }
19448 else {
19449 return ((VALUE)RUBY_Qundef);
19450 }
19451}
19452ALWAYS_INLINE(static inline VALUE
19453vm_opt_le(VALUE recv, VALUE obj));
19454static inline VALUE
19455vm_opt_le(VALUE recv, VALUE obj) {
19456 if (FIXNUM_2_P(recv, obj) &&
19457 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LE)]&((1 << 0))) == 0), 1)))) {
19458 return (((long)recv <= (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
19459 }
19460 else if (FLONUM_2_P(recv, obj) &&
19461 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LE)]&((1 << 1))) == 0), 1)))) {
19462 return ((rb_float_value_inline(recv) <= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
19463 }
19464 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
19465 return ((VALUE)RUBY_Qundef);
19466 }
19467 else if (RBASIC_CLASS(recv) == rb_cFloat &&
19468 RBASIC_CLASS(obj) == rb_cFloat &&
19469 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LE)]&((1 << 1))) == 0), 1)))) {
19470 ;
19471 return ((rb_float_value_inline(recv) <= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
19472 }
19473 else {
19474 return ((VALUE)RUBY_Qundef);
19475 }
19476}
19477ALWAYS_INLINE(static inline VALUE
19478vm_opt_gt(VALUE recv, VALUE obj));
19479static inline VALUE
19480vm_opt_gt(VALUE recv, VALUE obj) {
19481 if (FIXNUM_2_P(recv, obj) &&
19482 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GT)]&((1 << 0))) == 0), 1)))) {
19483 return (((long)recv > (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
19484 }
19485 else if (FLONUM_2_P(recv, obj) &&
19486 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GT)]&((1 << 1))) == 0), 1)))) {
19487 return ((rb_float_value_inline(recv) > rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
19488 }
19489 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
19490 return ((VALUE)RUBY_Qundef);
19491 }
19492 else if (RBASIC_CLASS(recv) == rb_cFloat &&
19493 RBASIC_CLASS(obj) == rb_cFloat &&
19494 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GT)]&((1 << 1))) == 0), 1)))) {
19495 ;
19496 return ((rb_float_value_inline(recv) > rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
19497 }
19498 else {
19499 return ((VALUE)RUBY_Qundef);
19500 }
19501}
19502ALWAYS_INLINE(static inline VALUE
19503vm_opt_ge(VALUE recv, VALUE obj));
19504static inline VALUE
19505vm_opt_ge(VALUE recv, VALUE obj) {
19506 if (FIXNUM_2_P(recv, obj) &&
19507 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GE)]&((1 << 0))) == 0), 1)))) {
19508 return (((long)recv >= (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
19509 }
19510 else if (FLONUM_2_P(recv, obj) &&
19511 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GE)]&((1 << 1))) == 0), 1)))) {
19512 return ((rb_float_value_inline(recv) >= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
19513 }
19514 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
19515 return ((VALUE)RUBY_Qundef);
19516 }
19517 else if (RBASIC_CLASS(recv) == rb_cFloat &&
19518 RBASIC_CLASS(obj) == rb_cFloat &&
19519 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GE)]&((1 << 1))) == 0), 1)))) {
19520 ;
19521 return ((rb_float_value_inline(recv) >= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
19522 }
19523 else {
19524 return ((VALUE)RUBY_Qundef);
19525 }
19526}
19527ALWAYS_INLINE(static inline VALUE
19528vm_opt_ltlt(VALUE recv, VALUE obj));
19529static inline VALUE
19530vm_opt_ltlt(VALUE recv, VALUE obj) {
19531 if (RB_SPECIAL_CONST_P(recv)) {
19532 return ((VALUE)RUBY_Qundef);
19533 }
19534 else if (RBASIC_CLASS(recv) == rb_cString &&
19535 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LTLT)]&((1 << 2))) == 0), 1)))) {
19536 return rb_str_concat(recv, obj);
19537 }
19538 else if (RBASIC_CLASS(recv) == rb_cArray &&
19539 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LTLT)]&((1 << 3))) == 0), 1)))) {
19540 return rb_ary_push(recv, obj);
19541 }
19542 else {
19543 return ((VALUE)RUBY_Qundef);
19544 }
19545}
19546ALWAYS_INLINE(static inline VALUE
19547vm_opt_and(VALUE recv, VALUE obj));
19548static inline VALUE
19549vm_opt_and(VALUE recv, VALUE obj) {
19550 if (FIXNUM_2_P(recv, obj) &&
19551 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AND)]&((1 << 0))) == 0), 1)))) {
19552 return (recv & obj) | 1;
19553 }
19554 else {
19555 return ((VALUE)RUBY_Qundef);
19556 }
19557}
19558ALWAYS_INLINE(static inline VALUE
19559vm_opt_or(VALUE recv, VALUE obj));
19560static inline VALUE
19561vm_opt_or(VALUE recv, VALUE obj) {
19562 if (FIXNUM_2_P(recv, obj) &&
19563 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_OR)]&((1 << 0))) == 0), 1)))) {
19564 return recv | obj;
19565 }
19566 else {
19567 return ((VALUE)RUBY_Qundef);
19568 }
19569}
19570ALWAYS_INLINE(static inline VALUE
19571vm_opt_aref(VALUE recv, VALUE obj));
19572static inline VALUE
19573vm_opt_aref(VALUE recv, VALUE obj) {
19574 if (RB_SPECIAL_CONST_P(recv)) {
19575 if (FIXNUM_2_P(recv, obj) &&
19576 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AREF)]&((1 << 0))) == 0), 1)))) {
19577 return rb_fix_aref(recv, obj);
19578 }
19579 return ((VALUE)RUBY_Qundef);
19580 }
19581 else if (RBASIC_CLASS(recv) == rb_cArray &&
19582 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AREF)]&((1 << 3))) == 0), 1)))) {
19583 if (RB_FIXNUM_P(obj)) {
19584 return rb_ary_entry_internal(recv, rb_fix2long(obj));
19585 }
19586 else {
19587 return rb_ary_aref1(recv, obj);
19588 }
19589 }
19590 else if (RBASIC_CLASS(recv) == rb_cHash &&
19591 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AREF)]&((1 << 4))) == 0), 1)))) {
19592 return rb_hash_aref(recv, obj);
19593 }
19594 else {
19595 return ((VALUE)RUBY_Qundef);
19596 }
19597}
19598ALWAYS_INLINE(static inline VALUE
19599vm_opt_aset(VALUE recv, VALUE obj, VALUE set));
19600static inline VALUE
19601vm_opt_aset(VALUE recv, VALUE obj, VALUE set) {
19602 if (RB_SPECIAL_CONST_P(recv)) {
19603 return ((VALUE)RUBY_Qundef);
19604 }
19605 else if (RBASIC_CLASS(recv) == rb_cArray &&
19606 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_ASET)]&((1 << 3))) == 0), 1))) &&
19607 RB_FIXNUM_P(obj)) {
19608 rb_ary_store(recv, rb_fix2long(obj), set);
19609 return set;
19610 }
19611 else if (RBASIC_CLASS(recv) == rb_cHash &&
19612 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_ASET)]&((1 << 4))) == 0), 1)))) {
19613 rb_hash_aset(recv, obj, set);
19614 return set;
19615 }
19616 else {
19617 return ((VALUE)RUBY_Qundef);
19618 }
19619}
19620ALWAYS_INLINE(static inline VALUE
19621vm_opt_aref_with(VALUE recv, VALUE key));
19622static inline VALUE
19623vm_opt_aref_with(VALUE recv, VALUE key) {
19624 if (!RB_SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash &&
19625 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AREF)]&((1 << 4))) == 0), 1))) &&
19626 rb_hash_compare_by_id_p(recv) == ((VALUE)RUBY_Qfalse)) {
19627 return rb_hash_aref(recv, key);
19628 }
19629 else {
19630 return ((VALUE)RUBY_Qundef);
19631 }
19632}
19633ALWAYS_INLINE(static inline VALUE
19634vm_opt_aset_with(VALUE recv, VALUE key, VALUE val));
19635static inline VALUE
19636vm_opt_aset_with(VALUE recv, VALUE key, VALUE val) {
19637 if (!RB_SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash &&
19638 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_ASET)]&((1 << 4))) == 0), 1))) &&
19639 rb_hash_compare_by_id_p(recv) == ((VALUE)RUBY_Qfalse)) {
19640 return rb_hash_aset(recv, key, val);
19641 }
19642 else {
19643 return ((VALUE)RUBY_Qundef);
19644 }
19645}
19646static VALUE
19647vm_opt_length(VALUE recv, int bop)
19648{
19649 if (RB_SPECIAL_CONST_P(recv)) {
19650 return ((VALUE)RUBY_Qundef);
19651 }
19652 else if (RBASIC_CLASS(recv) == rb_cString &&
19653 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(bop)]&((1 << 2))) == 0), 1)))) {
19654 if (bop == BOP_EMPTY_P) {
19655 return rb_long2num_inline(RSTRING_LEN(recv));
19656 }
19657 else {
19658 return rb_str_length(recv);
19659 }
19660 }
19661 else if (RBASIC_CLASS(recv) == rb_cArray &&
19662 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(bop)]&((1 << 3))) == 0), 1)))) {
19663 return rb_long2num_inline(rb_array_len(recv));
19664 }
19665 else if (RBASIC_CLASS(recv) == rb_cHash &&
19666 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(bop)]&((1 << 4))) == 0), 1)))) {
19667 return __builtin_choose_expr( __builtin_constant_p(RHASH_SIZE(recv)), ((VALUE)(RHASH_SIZE(recv))) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(RHASH_SIZE(recv)));
19668 }
19669 else {
19670 return ((VALUE)RUBY_Qundef);
19671 }
19672}
19673static VALUE
19674vm_opt_empty_p(VALUE recv)
19675{
19676 switch (vm_opt_length(recv, BOP_EMPTY_P)) {
19677 case ((VALUE)RUBY_Qundef): return ((VALUE)RUBY_Qundef);
19678 case __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0)): return ((VALUE)RUBY_Qtrue);
19679 default: return ((VALUE)RUBY_Qfalse);
19680 }
19681}
19682VALUE rb_false(VALUE obj);
19683static VALUE
19684vm_opt_nil_p(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv)
19685{
19686 if (RB_NIL_P(recv) &&
19687 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_NIL_P)]&((1 << 9))) == 0), 1)))) {
19688 return ((VALUE)RUBY_Qtrue);
19689 }
19690 else if (vm_method_cfunc_is(iseq, cd, recv, rb_false)) {
19691 return ((VALUE)RUBY_Qfalse);
19692 }
19693 else {
19694 return ((VALUE)RUBY_Qundef);
19695 }
19696}
19697static VALUE
19698fix_succ(VALUE x)
19699{
19700 switch (x) {
19701 case ~0UL:
19702 return __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
19703 case ((~0UL)>>(int)(1)):
19704 return rb_uint2big(1UL << (8 * 8 - 2));
19705 default:
19706 return x + 2;
19707 }
19708}
19709static VALUE
19710vm_opt_succ(VALUE recv)
19711{
19712 if (RB_FIXNUM_P(recv) &&
19713 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_SUCC)]&((1 << 0))) == 0), 1)))) {
19714 return fix_succ(recv);
19715 }
19716 else if (RB_SPECIAL_CONST_P(recv)) {
19717 return ((VALUE)RUBY_Qundef);
19718 }
19719 else if (RBASIC_CLASS(recv) == rb_cString &&
19720 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_SUCC)]&((1 << 2))) == 0), 1)))) {
19721 return rb_str_succ(recv);
19722 }
19723 else {
19724 return ((VALUE)RUBY_Qundef);
19725 }
19726}
19727ALWAYS_INLINE(static inline VALUE
19728vm_opt_not(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv));
19729static inline VALUE
19730vm_opt_not(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv) {
19731 if (vm_method_cfunc_is(iseq, cd, recv, rb_obj_not)) {
19732 return RB_TEST(recv) ? ((VALUE)RUBY_Qfalse) : ((VALUE)RUBY_Qtrue);
19733 }
19734 else {
19735 return ((VALUE)RUBY_Qundef);
19736 }
19737}
19738static VALUE
19739vm_opt_regexpmatch2(VALUE recv, VALUE obj)
19740{
19741 if (RB_SPECIAL_CONST_P(recv)) {
19742 return ((VALUE)RUBY_Qundef);
19743 }
19744 else if (RBASIC_CLASS(recv) == rb_cString &&
19745 rb_class_of(obj) == rb_cRegexp &&
19746 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MATCH)]&((1 << 2))) == 0), 1)))) {
19747 return rb_reg_match(obj, recv);
19748 }
19749 else if (RBASIC_CLASS(recv) == rb_cRegexp &&
19750 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MATCH)]&((1 << 8))) == 0), 1)))) {
19751 return rb_reg_match(recv, obj);
19752 }
19753 else {
19754 return ((VALUE)RUBY_Qundef);
19755 }
19756}
19757rb_event_flag_t rb_iseq_event_flags(const rb_iseq_t *iseq, size_t pos);
19758__attribute__((__noinline__)) static void vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp);
19759static inline void
19760vm_trace_hook(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, const VALUE *pc,
19761 rb_event_flag_t pc_events, rb_event_flag_t target_event,
19762 rb_hook_list_t *global_hooks, rb_hook_list_t *local_hooks, VALUE val)
19763{
19764 rb_event_flag_t event = pc_events & target_event;
19765 VALUE self = (((((reg_cfp)))->self));
19766 ((void)0);
19767 if (event & global_hooks->events) {
19768 reg_cfp->pc++;
19769 vm_dtrace(event, ec);
19770 rb_exec_event_hook_orig(ec, global_hooks, event, self, 0, 0, 0 , val, 0);
19771 reg_cfp->pc--;
19772 }
19773 if (local_hooks != ((void *)0)) {
19774 if (event & local_hooks->events) {
19775 reg_cfp->pc++;
19776 rb_exec_event_hook_orig(ec, local_hooks, event, self, 0, 0, 0 , val, 0);
19777 reg_cfp->pc--;
19778 }
19779 }
19780}static inline
19781_Bool
19782rb_vm_opt_cfunc_p(CALL_CACHE cc, int insn)
19783{
19784 switch (insn) {
19785 case YARVINSN_opt_eq:
19786 return check_cfunc(vm_cc_cme(cc), rb_obj_equal);
19787 case YARVINSN_opt_nil_p:
19788 return check_cfunc(vm_cc_cme(cc), rb_false);
19789 case YARVINSN_opt_not:
19790 return check_cfunc(vm_cc_cme(cc), rb_obj_not);
19791 default:
19792 return 0;
19793 }
19794}
19795static void
19796vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp)
19797{
19798 const VALUE *pc = reg_cfp->pc;
19799 rb_event_flag_t enabled_flags = ruby_vm_event_flags & (0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010| 0x0020| 0x0040| 0x0100| 0x0200| 0x010000| 0x020000);
19800 rb_event_flag_t global_events = enabled_flags;
19801 if (enabled_flags == 0 && ruby_vm_event_local_num == 0) {
19802 return;
19803 }
19804 else {
19805 const rb_iseq_t *iseq = reg_cfp->iseq;
19806 size_t pos = pc - iseq->body->iseq_encoded;
19807 rb_event_flag_t pc_events = rb_iseq_event_flags(iseq, pos);
19808 rb_hook_list_t *local_hooks = iseq->aux.exec.local_hooks;
19809 rb_event_flag_t iseq_local_events = local_hooks != ((void *)0) ? local_hooks->events : 0;
19810 rb_hook_list_t *bmethod_local_hooks = ((void *)0);
19811 rb_event_flag_t bmethod_local_events = 0;
19812 _Bool bmethod_frame = VM_FRAME_BMETHOD_P(reg_cfp);
19813 enabled_flags |= iseq_local_events;
19814 ((void)0);
19815 if (bmethod_frame) {
19816 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(reg_cfp);
19817 ((void)0);
19818 bmethod_local_hooks = me->def->body.bmethod.hooks;
19819 if (bmethod_local_hooks) {
19820 bmethod_local_events = bmethod_local_hooks->events;
19821 }
19822 }
19823 if ((pc_events & enabled_flags) == 0 && !bmethod_frame) {
19824 return;
19825 }
19826 else if (ec->trace_arg != ((void *)0)) {
19827 return;
19828 }
19829 else {
19830 rb_hook_list_t *global_hooks = rb_ec_ractor_hooks(ec);
19831 rb_event_flag_t bmethod_events = global_events | bmethod_local_events;
19832 if (0) {
19833 ruby_debug_printf("vm_trace>>%4d (%4x) - %s:%d %s\n",
19834 (int)pos,
19835 (int)pc_events,
19836 RSTRING_PTR(rb_iseq_path(iseq)),
19837 (int)rb_iseq_line_no(iseq, pos),
19838 RSTRING_PTR(rb_iseq_label(iseq)));
19839 }
19840 ((void)0);
19841 ((void)0);
19842 if ((pc_events & 0x0100) && bmethod_frame && (bmethod_events & 0x0008)) {
19843 vm_trace_hook(ec, reg_cfp, pc, 0x0008, 0x0008, global_hooks, bmethod_local_hooks, ((VALUE)RUBY_Qundef));
19844 }
19845 do { if ((pc_events & (0x0002 | 0x0008 | 0x0100)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (0x0002 | 0x0008 | 0x0100), global_hooks, local_hooks, (((VALUE)RUBY_Qundef))); } } while (0);
19846 do { if ((pc_events & (0x0001)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (0x0001), global_hooks, local_hooks, (((VALUE)RUBY_Qundef))); } } while (0);
19847 do { if ((pc_events & (0x010000)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (0x010000), global_hooks, local_hooks, (((VALUE)RUBY_Qundef))); } } while (0);
19848 do { if ((pc_events & (0x020000)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (0x020000), global_hooks, local_hooks, (((VALUE)RUBY_Qundef))); } } while (0);
19849 do { if ((pc_events & (0x0004 | 0x0010 | 0x0200)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (0x0004 | 0x0010 | 0x0200), global_hooks, local_hooks, ((*(((((reg_cfp)->sp)))-(0)-1)))); } } while (0);
19850 if ((pc_events & 0x0200) && bmethod_frame && (bmethod_events & 0x0010)) {
19851 vm_trace_hook(ec, reg_cfp, pc, 0x0010, 0x0010, global_hooks, bmethod_local_hooks, (*(((((reg_cfp)->sp)))-(0)-1)));
19852 }
19853 }
19854 }
19855}static inline
19856void Init_vm_stack_canary(void) { }
19857static VALUE
19858builtin_invoker0(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19859{
19860 typedef VALUE (*rb_invoke_funcptr0_t)(rb_execution_context_t *ec, VALUE self);
19861 return (*(rb_invoke_funcptr0_t)funcptr)(ec, self);
19862}
19863static VALUE
19864builtin_invoker1(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19865{
19866 typedef VALUE (*rb_invoke_funcptr1_t)(rb_execution_context_t *ec, VALUE self, VALUE v1);
19867 return (*(rb_invoke_funcptr1_t)funcptr)(ec, self, argv[0]);
19868}
19869static VALUE
19870builtin_invoker2(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19871{
19872 typedef VALUE (*rb_invoke_funcptr2_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2);
19873 return (*(rb_invoke_funcptr2_t)funcptr)(ec, self, argv[0], argv[1]);
19874}
19875static VALUE
19876builtin_invoker3(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19877{
19878 typedef VALUE (*rb_invoke_funcptr3_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3);
19879 return (*(rb_invoke_funcptr3_t)funcptr)(ec, self, argv[0], argv[1], argv[2]);
19880}
19881static VALUE
19882builtin_invoker4(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19883{
19884 typedef VALUE (*rb_invoke_funcptr4_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4);
19885 return (*(rb_invoke_funcptr4_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3]);
19886}
19887static VALUE
19888builtin_invoker5(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19889{
19890 typedef VALUE (*rb_invoke_funcptr5_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5);
19891 return (*(rb_invoke_funcptr5_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4]);
19892}
19893static VALUE
19894builtin_invoker6(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19895{
19896 typedef VALUE (*rb_invoke_funcptr6_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6);
19897 return (*(rb_invoke_funcptr6_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
19898}
19899static VALUE
19900builtin_invoker7(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19901{
19902 typedef VALUE (*rb_invoke_funcptr7_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7);
19903 return (*(rb_invoke_funcptr7_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
19904}
19905static VALUE
19906builtin_invoker8(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19907{
19908 typedef VALUE (*rb_invoke_funcptr8_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8);
19909 return (*(rb_invoke_funcptr8_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
19910}
19911static VALUE
19912builtin_invoker9(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19913{
19914 typedef VALUE (*rb_invoke_funcptr9_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9);
19915 return (*(rb_invoke_funcptr9_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
19916}
19917static VALUE
19918builtin_invoker10(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19919{
19920 typedef VALUE (*rb_invoke_funcptr10_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9, VALUE v10);
19921 return (*(rb_invoke_funcptr10_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
19922}
19923static VALUE
19924builtin_invoker11(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19925{
19926 typedef VALUE (*rb_invoke_funcptr11_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9, VALUE v10, VALUE v11);
19927 return (*(rb_invoke_funcptr11_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10]);
19928}
19929static VALUE
19930builtin_invoker12(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19931{
19932 typedef VALUE (*rb_invoke_funcptr12_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9, VALUE v10, VALUE v11, VALUE v12);
19933 return (*(rb_invoke_funcptr12_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11]);
19934}
19935static VALUE
19936builtin_invoker13(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19937{
19938 typedef VALUE (*rb_invoke_funcptr13_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9, VALUE v10, VALUE v11, VALUE v12, VALUE v13);
19939 return (*(rb_invoke_funcptr13_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12]);
19940}
19941static VALUE
19942builtin_invoker14(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19943{
19944 typedef VALUE (*rb_invoke_funcptr14_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9, VALUE v10, VALUE v11, VALUE v12, VALUE v13, VALUE v14);
19945 return (*(rb_invoke_funcptr14_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13]);
19946}
19947static VALUE
19948builtin_invoker15(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
19949{
19950 typedef VALUE (*rb_invoke_funcptr15_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9, VALUE v10, VALUE v11, VALUE v12, VALUE v13, VALUE v14, VALUE v15);
19951 return (*(rb_invoke_funcptr15_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14]);
19952}
19953typedef VALUE (*builtin_invoker)(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr);
19954static builtin_invoker
19955lookup_builtin_invoker(int argc)
19956{
19957 static const builtin_invoker invokers[] = {
19958 builtin_invoker0,
19959 builtin_invoker1,
19960 builtin_invoker2,
19961 builtin_invoker3,
19962 builtin_invoker4,
19963 builtin_invoker5,
19964 builtin_invoker6,
19965 builtin_invoker7,
19966 builtin_invoker8,
19967 builtin_invoker9,
19968 builtin_invoker10,
19969 builtin_invoker11,
19970 builtin_invoker12,
19971 builtin_invoker13,
19972 builtin_invoker14,
19973 builtin_invoker15,
19974 };
19975 return invokers[argc];
19976}
19977static inline VALUE
19978invoke_bf(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, const struct rb_builtin_function* bf, const VALUE *argv)
19979{
19980 const _Bool canary_p = reg_cfp->iseq->body->builtin_inline_p;
19981 if (canary_p) {} else {};
19982 VALUE ret = (*lookup_builtin_invoker(bf->argc))(ec, reg_cfp->self, argv, (rb_insn_func_t)bf->func_ptr);
19983 if (canary_p) {(void)(YARVINSN_invokebuiltin);};
19984 return ret;
19985}
19986static VALUE
19987vm_invoke_builtin(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function* bf, const VALUE *argv)
19988{
19989 return invoke_bf(ec, cfp, bf, argv);
19990}
19991static VALUE
19992vm_invoke_builtin_delegate(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function *bf, unsigned int start_index)
19993{
19994 if (0) {
19995 fputs("vm_invoke_builtin_delegate: passing -> ", stderr);
19996 for (int i=0; i<bf->argc; i++) {
19997 ruby_debug_printf(":%s ", rb_id2name(cfp->iseq->body->local_table[i+start_index]));
19998 }
19999 ruby_debug_printf("\n" "%s %s(%d):%p\n", __func__, bf->name, bf->argc, bf->func_ptr);
20000 }
20001 if (bf->argc == 0) {
20002 return invoke_bf(ec, cfp, bf, ((void *)0));
20003 }
20004 else {
20005 const VALUE *argv = cfp->ep - cfp->iseq->body->local_table_size - ( 3) + 1 + start_index;
20006 return invoke_bf(ec, cfp, bf, argv);
20007 }
20008}static inline
20009VALUE
20010rb_vm_lvar_exposed(rb_execution_context_t *ec, int index)
20011{
20012 const rb_control_frame_t *cfp = ec->cfp;
20013 return cfp->ep[index];
20014}
20015struct local_var_list {
20016 VALUE tbl;
20017};
20018static inline VALUE method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv, enum method_missing_reason call_status, int kw_splat);
20019static inline VALUE vm_yield_with_cref(rb_execution_context_t *ec, int argc, const VALUE *argv, int kw_splat, const rb_cref_t *cref, int is_lambda);
20020static inline VALUE vm_yield(rb_execution_context_t *ec, int argc, const VALUE *argv, int kw_splat);
20021static inline VALUE vm_yield_with_block(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE block_handler, int kw_splat);
20022static inline VALUE vm_yield_force_blockarg(rb_execution_context_t *ec, VALUE args);
20023VALUE rb_vm_exec(rb_execution_context_t *ec, _Bool mjit_enable_p);
20024static void vm_set_eval_stack(rb_execution_context_t * th, const rb_iseq_t *iseq, const rb_cref_t *cref, const struct rb_block *base_block);
20025static int vm_collect_local_variables_in_heap(const VALUE *dfp, const struct local_var_list *vars);
20026static VALUE rb_eUncaughtThrow;
20027static ID id_result, id_tag, id_value;
20028typedef enum call_type {
20029 CALL_PUBLIC,
20030 CALL_FCALL,
20031 CALL_VCALL,
20032 CALL_PUBLIC_KW,
20033 CALL_FCALL_KW,
20034 CALL_TYPE_MAX
20035} call_type;
20036static VALUE send_internal(int argc, const VALUE *argv, VALUE recv, call_type scope);
20037static VALUE vm_call0_body(rb_execution_context_t* ec, struct rb_calling_info *calling, const VALUE *argv);
20038static inline void
20039stack_check(rb_execution_context_t *ec)
20040{
20041 if (!(((ec)->raised_flag & (RAISED_STACKOVERFLOW)) != 0) &&
20042 rb_ec_stack_check(ec)) {
20043 ((ec)->raised_flag |= (RAISED_STACKOVERFLOW));
20044 rb_ec_stack_overflow(ec, 0);
20045 }
20046}
20047static void
20048raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE obj,
20049 enum method_missing_reason last_call_status)
20050{
20051 VALUE exc = rb_eNoMethodError;
20052 VALUE format = 0;
20053 if ((__builtin_expect(!!(argc == 0), 0))) {
20054 rb_raise(rb_eArgError, "no method name given");
20055 }
20056 else if ((__builtin_expect(!!(!RB_SYMBOL_P(argv[0])), 0))) {
20057 const VALUE e = rb_eArgError;
20058 rb_raise(e, "method name must be a Symbol but %""l""i" "\v"" is given",
20059 rb_obj_class(argv[0]));
20060 }
20061 stack_check(ec);
20062 if (last_call_status & MISSING_PRIVATE) {
20063 format = rb_fstring_new(("private method `%s' called for %s%s%s"), (sizeof("private method `%s' called for %s%s%s" "") - 1));
20064 }
20065 else if (last_call_status & MISSING_PROTECTED) {
20066 format = rb_fstring_new(("protected method `%s' called for %s%s%s"), (sizeof("protected method `%s' called for %s%s%s" "") - 1));
20067 }
20068 else if (last_call_status & MISSING_VCALL) {
20069 format = rb_fstring_new(("undefined local variable or method `%s' for %s%s%s"), (sizeof("undefined local variable or method `%s' for %s%s%s" "") - 1));
20070 exc = rb_eNameError;
20071 }
20072 else if (last_call_status & MISSING_SUPER) {
20073 format = rb_fstring_new(("super: no superclass method `%s' for %s%s%s"), (sizeof("super: no superclass method `%s' for %s%s%s" "") - 1));
20074 }
20075 {
20076 exc = rb_make_no_method_exception(exc, format, obj, argc, argv,
20077 last_call_status & (MISSING_FCALL|MISSING_VCALL));
20078 if (!(last_call_status & MISSING_MISSING)) {
20079 rb_vm_pop_cfunc_frame();
20080 }
20081 rb_exc_raise(exc);
20082 }
20083}
20084static void
20085vm_raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv,
20086 VALUE obj, int call_status)
20087{
20088 vm_passed_block_handler_set(ec, 0);
20089 raise_method_missing(ec, argc, argv, obj, call_status | MISSING_MISSING);
20090}
20091static inline VALUE
20092method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv, enum method_missing_reason call_status, int kw_splat)
20093{
20094 VALUE *nargv, result, work, klass;
20095 VALUE block_handler = vm_passed_block_handler(ec);
20096 const rb_callable_method_entry_t *me;
20097 ec->method_missing_reason = call_status;
20098 if (id == idMethodMissing) {
20099 goto missing;
20100 }
20101 nargv = ((VALUE *) (((size_t)(argc + 1) < 1024 / sizeof(VALUE)) ? ((work) = 0, __builtin_alloca ((argc + 1) * sizeof(VALUE))) : rb_alloc_tmp_buffer2(&(work), (argc + 1), sizeof(VALUE))));
20102 nargv[0] = rb_id2sym(id);
20103 if (!argv) {
20104 static const VALUE buf = ((VALUE)RUBY_Qfalse);
20105 ((void)0);
20106 argv = &buf;
20107 }
20108 ruby_nonempty_memcpy((nargv + 1), (argv), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
20109 ++argc;
20110 argv = nargv;
20111 klass = rb_class_of(obj);
20112 if (!klass) goto missing;
20113 me = rb_callable_method_entry(klass, idMethodMissing);
20114 if (!me || (int) (((me)->flags & (((VALUE)RUBY_FL_USER6) )) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+2))) goto missing;
20115 vm_passed_block_handler_set(ec, block_handler);
20116 result = rb_vm_call_kw(ec, obj, idMethodMissing, argc, argv, me, kw_splat);
20117 if (work) rb_free_tmp_buffer(&(work));
20118 return result;
20119 missing:
20120 raise_method_missing(ec, argc, argv, obj, call_status | MISSING_MISSING);
20121 __builtin_unreachable();
20122}
20123static rb_control_frame_t *
20124vm_get_ruby_level_caller_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
20125{
20126 if (VM_FRAME_RUBYFRAME_P(cfp)) {
20127 return (rb_control_frame_t *)cfp;
20128 }
20129 cfp = ((cfp)+1);
20130 while (!RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(ec, cfp)) {
20131 if (VM_FRAME_RUBYFRAME_P(cfp)) {
20132 return (rb_control_frame_t *)cfp;
20133 }
20134 if (VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_PASSED) == 0) {
20135 break;
20136 }
20137 cfp = ((cfp)+1);
20138 }
20139 return 0;
20140}
20141static void
20142rb_vm_pop_cfunc_frame(void)
20143{
20144 rb_execution_context_t *ec = rb_current_execution_context(1);
20145 rb_control_frame_t *cfp = ec->cfp;
20146 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(cfp);
20147 do { const rb_event_flag_t flag_arg_ = (0x0040); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, cfp->self, me->def->original_id, me->called_id, me->owner, ((VALUE)RUBY_Qnil), 0); } } while (0);
20148 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, me->owner, me->def->original_id, &args)) { do {} while (0); } } } while (0);
20149 vm_pop_frame(ec, cfp, cfp->ep);
20150}
20151static VALUE
20152vm_call_iseq_setup_normal_0start_0params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20153{
20154 ((void)0);
20155 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 0);
20156}
20157static VALUE
20158vm_call_iseq_setup_normal_0start_0params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20159{
20160 ((void)0);
20161 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 1);
20162}
20163static VALUE
20164vm_call_iseq_setup_normal_0start_0params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20165{
20166 ((void)0);
20167 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 2);
20168}
20169static VALUE
20170vm_call_iseq_setup_normal_0start_0params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20171{
20172 ((void)0);
20173 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 3);
20174}
20175static VALUE
20176vm_call_iseq_setup_normal_0start_0params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20177{
20178 ((void)0);
20179 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 4);
20180}
20181static VALUE
20182vm_call_iseq_setup_normal_0start_0params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20183{
20184 ((void)0);
20185 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 5);
20186}
20187static VALUE
20188vm_call_iseq_setup_normal_0start_1params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20189{
20190 ((void)0);
20191 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 0);
20192}
20193static VALUE
20194vm_call_iseq_setup_normal_0start_1params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20195{
20196 ((void)0);
20197 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 1);
20198}
20199static VALUE
20200vm_call_iseq_setup_normal_0start_1params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20201{
20202 ((void)0);
20203 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 2);
20204}
20205static VALUE
20206vm_call_iseq_setup_normal_0start_1params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20207{
20208 ((void)0);
20209 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 3);
20210}
20211static VALUE
20212vm_call_iseq_setup_normal_0start_1params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20213{
20214 ((void)0);
20215 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 4);
20216}
20217static VALUE
20218vm_call_iseq_setup_normal_0start_1params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20219{
20220 ((void)0);
20221 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 5);
20222}
20223static VALUE
20224vm_call_iseq_setup_normal_0start_2params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20225{
20226 ((void)0);
20227 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 0);
20228}
20229static VALUE
20230vm_call_iseq_setup_normal_0start_2params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20231{
20232 ((void)0);
20233 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 1);
20234}
20235static VALUE
20236vm_call_iseq_setup_normal_0start_2params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20237{
20238 ((void)0);
20239 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 2);
20240}
20241static VALUE
20242vm_call_iseq_setup_normal_0start_2params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20243{
20244 ((void)0);
20245 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 3);
20246}
20247static VALUE
20248vm_call_iseq_setup_normal_0start_2params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20249{
20250 ((void)0);
20251 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 4);
20252}
20253static VALUE
20254vm_call_iseq_setup_normal_0start_2params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20255{
20256 ((void)0);
20257 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 5);
20258}
20259static VALUE
20260vm_call_iseq_setup_normal_0start_3params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20261{
20262 ((void)0);
20263 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 0);
20264}
20265static VALUE
20266vm_call_iseq_setup_normal_0start_3params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20267{
20268 ((void)0);
20269 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 1);
20270}
20271static VALUE
20272vm_call_iseq_setup_normal_0start_3params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20273{
20274 ((void)0);
20275 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 2);
20276}
20277static VALUE
20278vm_call_iseq_setup_normal_0start_3params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20279{
20280 ((void)0);
20281 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 3);
20282}
20283static VALUE
20284vm_call_iseq_setup_normal_0start_3params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20285{
20286 ((void)0);
20287 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 4);
20288}
20289static VALUE
20290vm_call_iseq_setup_normal_0start_3params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
20291{
20292 ((void)0);
20293 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 5);
20294}
20295static const vm_call_handler vm_call_iseq_handlers[][6] = {
20296 {
20297 vm_call_iseq_setup_normal_0start_0params_0locals,
20298 vm_call_iseq_setup_normal_0start_0params_1locals,
20299 vm_call_iseq_setup_normal_0start_0params_2locals,
20300 vm_call_iseq_setup_normal_0start_0params_3locals,
20301 vm_call_iseq_setup_normal_0start_0params_4locals,
20302 vm_call_iseq_setup_normal_0start_0params_5locals,
20303 },
20304 {
20305 vm_call_iseq_setup_normal_0start_1params_0locals,
20306 vm_call_iseq_setup_normal_0start_1params_1locals,
20307 vm_call_iseq_setup_normal_0start_1params_2locals,
20308 vm_call_iseq_setup_normal_0start_1params_3locals,
20309 vm_call_iseq_setup_normal_0start_1params_4locals,
20310 vm_call_iseq_setup_normal_0start_1params_5locals,
20311 },
20312 {
20313 vm_call_iseq_setup_normal_0start_2params_0locals,
20314 vm_call_iseq_setup_normal_0start_2params_1locals,
20315 vm_call_iseq_setup_normal_0start_2params_2locals,
20316 vm_call_iseq_setup_normal_0start_2params_3locals,
20317 vm_call_iseq_setup_normal_0start_2params_4locals,
20318 vm_call_iseq_setup_normal_0start_2params_5locals,
20319 },
20320 {
20321 vm_call_iseq_setup_normal_0start_3params_0locals,
20322 vm_call_iseq_setup_normal_0start_3params_1locals,
20323 vm_call_iseq_setup_normal_0start_3params_2locals,
20324 vm_call_iseq_setup_normal_0start_3params_3locals,
20325 vm_call_iseq_setup_normal_0start_3params_4locals,
20326 vm_call_iseq_setup_normal_0start_3params_5locals,
20327 },
20328};
20329static inline vm_call_handler
20330vm_call_iseq_setup_func(const struct rb_callinfo *ci, const int param_size, const int local_size)
20331{
20332 if ((__builtin_expect(!!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit)), 0))) {
20333 return &vm_call_iseq_setup_tailcall_0start;
20334 }
20335 else if (0) {
20336 return &vm_call_iseq_setup_normal_0start;
20337 }
20338 else if (param_size <= 3 && local_size <= 5) {
20339 ((void)0);
20340 return vm_call_iseq_handlers[param_size][local_size];
20341 }
20342 else {
20343 return &vm_call_iseq_setup_normal_0start;
20344 }
20345}
20346#define MJIT_HEADER 1
20347#define _FORTIFY_SOURCE 2
20348#define RUBY_EXPORT 1
20349#define _STDC_PREDEF_H 1
20350#define __STDC_IEC_559__ 1
20351#define __STDC_IEC_559_COMPLEX__ 1
20352#define __STDC_ISO_10646__ 201706L
20353#define vm_exec rb_vm_exec
20354#define RUBY_EVAL_INTERN_H
20355#define RUBY_RUBY_H 1
20356#define RBIMPL_CONFIG_H
20357#define INCLUDE_RUBY_CONFIG_H 1
20358#define HAVE_STDIO_H 1
20359#define HAVE_STDLIB_H 1
20360#define HAVE_STRING_H 1
20361#define HAVE_INTTYPES_H 1
20362#define HAVE_STDINT_H 1
20363#define HAVE_STRINGS_H 1
20364#define HAVE_SYS_STAT_H 1
20365#define HAVE_SYS_TYPES_H 1
20366#define HAVE_UNISTD_H 1
20367#define HAVE_WCHAR_H 1
20368#define STDC_HEADERS 1
20369#define _ALL_SOURCE 1
20370#define _DARWIN_C_SOURCE 1
20371#define _GNU_SOURCE 1
20372#define _HPUX_ALT_XOPEN_SOCKET_API 1
20373#define _NETBSD_SOURCE 1
20374#define _OPENBSD_SOURCE 1
20375#define _POSIX_PTHREAD_SEMANTICS 1
20376#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
20377#define __STDC_WANT_IEC_60559_BFP_EXT__ 1
20378#define __STDC_WANT_IEC_60559_DFP_EXT__ 1
20379#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
20380#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
20381#define __STDC_WANT_LIB_EXT2__ 1
20382#define __STDC_WANT_MATH_SPEC_FUNCS__ 1
20383#define _TANDEM_SOURCE 1
20384#define __EXTENSIONS__ 1
20385#define RUBY_SYMBOL_EXPORT_BEGIN _Pragma("GCC visibility push(default)")
20386#define RUBY_SYMBOL_EXPORT_END _Pragma("GCC visibility pop")
20387#define HAVE_STMT_AND_DECL_IN_EXPR 1
20388#define HAVE_LIBCRYPT 1
20389#define HAVE_LIBDL 1
20390#define HAVE_LIBCAPSTONE 1
20391#define HAVE_DIRENT_H 1
20392#define HAVE__BOOL 1
20393#define HAVE_STDBOOL_H 1
20394#define HAVE_SYS_WAIT_H 1
20395#define HAVE_GRP_H 1
20396#define HAVE_FCNTL_H 1
20397#define HAVE_FLOAT_H 1
20398#define HAVE_LANGINFO_H 1
20399#define HAVE_LIMITS_H 1
20400#define HAVE_LOCALE_H 1
20401#define HAVE_MALLOC_H 1
20402#define HAVE_PWD_H 1
20403#define HAVE_SANITIZER_ASAN_INTERFACE_H 1
20404#define HAVE_STDALIGN_H 1
20405#define HAVE_SYS_EVENTFD_H 1
20406#define HAVE_SYS_FCNTL_H 1
20407#define HAVE_SYS_FILE_H 1
20408#define HAVE_SYS_IOCTL_H 1
20409#define HAVE_SYS_PARAM_H 1
20410#define HAVE_SYS_PRCTL_H 1
20411#define HAVE_SYS_RANDOM_H 1
20412#define HAVE_SYS_RESOURCE_H 1
20413#define HAVE_SYS_SELECT_H 1
20414#define HAVE_SYS_SENDFILE_H 1
20415#define HAVE_SYS_SOCKET_H 1
20416#define HAVE_SYS_SYSCALL_H 1
20417#define HAVE_SYS_SYSMACROS_H 1
20418#define HAVE_SYS_TIME_H 1
20419#define HAVE_SYS_TIMES_H 1
20420#define HAVE_SYS_UIO_H 1
20421#define HAVE_SYSCALL_H 1
20422#define HAVE_TIME_H 1
20423#define HAVE_UCONTEXT_H 1
20424#define HAVE_UTIME_H 1
20425#define HAVE_X86INTRIN_H 1
20426#define HAVE_X86INTRIN_H 1
20427#define HAVE_GMP_H 1
20428#define HAVE_LIBGMP 1
20429#define HAVE_TYPEOF 1
20430#define restrict __restrict__
20431#define HAVE_LONG_LONG 1
20432#define HAVE_OFF_T 1
20433#define SIZEOF_INT 4
20434#define SIZEOF_SHORT 2
20435#define SIZEOF_LONG 8
20436#define SIZEOF_LONG_LONG 8
20437#define SIZEOF___INT64 0
20438#define SIZEOF___INT128 16
20439#define SIZEOF_OFF_T 8
20440#define SIZEOF_VOIDP 8
20441#define SIZEOF_FLOAT 4
20442#define SIZEOF_DOUBLE 8
20443#define SIZEOF_TIME_T 8
20444#define SIZEOF_CLOCK_T 8
20445#define PACKED_STRUCT(x) x __attribute__((packed))
20446#define USE_UNALIGNED_MEMBER_ACCESS 1
20447#define PRI_LL_PREFIX "ll"
20448#define HAVE_PID_T 1
20449#define rb_pid_t pid_t
20450#define SIGNEDNESS_OF_PID_T -1
20451#define PIDT2NUM(v) INT2NUM(v)
20452#define NUM2PIDT(v) NUM2INT(v)
20453#define PRI_PIDT_PREFIX PRI_INT_PREFIX
20454#define HAVE_UID_T 1
20455#define rb_uid_t uid_t
20456#define SIGNEDNESS_OF_UID_T +1
20457#define UIDT2NUM(v) UINT2NUM(v)
20458#define NUM2UIDT(v) NUM2UINT(v)
20459#define PRI_UIDT_PREFIX PRI_INT_PREFIX
20460#define HAVE_GID_T 1
20461#define rb_gid_t gid_t
20462#define SIGNEDNESS_OF_GID_T +1
20463#define GIDT2NUM(v) UINT2NUM(v)
20464#define NUM2GIDT(v) NUM2UINT(v)
20465#define PRI_GIDT_PREFIX PRI_INT_PREFIX
20466#define HAVE_TIME_T 1
20467#define rb_time_t time_t
20468#define SIGNEDNESS_OF_TIME_T -1
20469#define TIMET2NUM(v) LONG2NUM(v)
20470#define NUM2TIMET(v) NUM2LONG(v)
20471#define PRI_TIMET_PREFIX PRI_LONG_PREFIX
20472#define HAVE_DEV_T 1
20473#define rb_dev_t dev_t
20474#define SIGNEDNESS_OF_DEV_T +1
20475#define DEVT2NUM(v) ULONG2NUM(v)
20476#define NUM2DEVT(v) NUM2ULONG(v)
20477#define PRI_DEVT_PREFIX PRI_LONG_PREFIX
20478#define HAVE_MODE_T 1
20479#define rb_mode_t mode_t
20480#define SIGNEDNESS_OF_MODE_T +1
20481#define MODET2NUM(v) UINT2NUM(v)
20482#define NUM2MODET(v) NUM2UINT(v)
20483#define PRI_MODET_PREFIX PRI_INT_PREFIX
20484#define HAVE_RLIM_T 1
20485#define rb_rlim_t rlim_t
20486#define SIGNEDNESS_OF_RLIM_T +1
20487#define RLIM2NUM(v) ULONG2NUM(v)
20488#define NUM2RLIM(v) NUM2ULONG(v)
20489#define PRI_RLIM_PREFIX PRI_LONG_PREFIX
20490#define HAVE_OFF_T 1
20491#define rb_off_t off_t
20492#define SIGNEDNESS_OF_OFF_T -1
20493#define OFFT2NUM(v) LONG2NUM(v)
20494#define NUM2OFFT(v) NUM2LONG(v)
20495#define PRI_OFFT_PREFIX PRI_LONG_PREFIX
20496#define HAVE_CLOCKID_T 1
20497#define rb_clockid_t clockid_t
20498#define SIGNEDNESS_OF_CLOCKID_T -1
20499#define CLOCKID2NUM(v) INT2NUM(v)
20500#define NUM2CLOCKID(v) NUM2INT(v)
20501#define PRI_CLOCKID_PREFIX PRI_INT_PREFIX
20502#define HAVE_VA_ARGS_MACRO 1
20503#define HAVE__ALIGNOF 1
20504#define CONSTFUNC(x) __attribute__ ((__const__)) x
20505#define PUREFUNC(x) __attribute__ ((__pure__)) x
20506#define NORETURN(x) __attribute__ ((__noreturn__)) x
20507#define DEPRECATED(x) __attribute__ ((__deprecated__)) x
20508#define DEPRECATED_BY(n,x) __attribute__ ((__deprecated__("by "#n))) x
20509#define NOINLINE(x) __attribute__ ((__noinline__)) x
20510#define NO_SANITIZE(san,x) __attribute__ ((__no_sanitize__(san))) x
20511#define NO_SANITIZE_ADDRESS(x) __attribute__ ((__no_sanitize_address__)) x
20512#define NO_ADDRESS_SAFETY_ANALYSIS(x) __attribute__ ((__no_address_safety_analysis__)) x
20513#define WARN_UNUSED_RESULT(x) __attribute__ ((__warn_unused_result__)) x
20514#define MAYBE_UNUSED(x) __attribute__ ((__unused__)) x
20515#define ERRORFUNC(mesg,x) __attribute__ ((__error__ mesg)) x
20516#define WARNINGFUNC(mesg,x) __attribute__ ((__warning__ mesg)) x
20517#define WEAK(x) __attribute__ ((__weak__)) x
20518#define HAVE_FUNC_WEAK 1
20519#define RUBY_CXX_DEPRECATED(msg) __attribute__((__deprecated__(msg)))
20520#define HAVE_NULLPTR 1
20521#define FUNC_UNOPTIMIZED(x) __attribute__ ((__optimize__("O0"))) x
20522#define FUNC_MINIMIZED(x) __attribute__ ((__optimize__("-Os","-fomit-frame-pointer"))) x
20523#define HAVE_ATTRIBUTE_FUNCTION_ALIAS 1
20524#define RUBY_ALIAS_FUNCTION_TYPE(type,prot,name,args) type prot __attribute__((alias(#name)));
20525#define RUBY_ALIAS_FUNCTION_VOID(prot,name,args) RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args)
20526#define HAVE_GCC_ATOMIC_BUILTINS 1
20527#define HAVE_GCC_SYNC_BUILTINS 1
20528#define UNREACHABLE __builtin_unreachable()
20529#define RUBY_FUNC_EXPORTED __attribute__ ((__visibility__("default"))) extern
20530#define RUBY_FUNC_NONNULL(n,x) __attribute__ ((__nonnull__(n))) x
20531#define RUBY_FUNCTION_NAME_STRING __func__
20532#define ENUM_OVER_INT 1
20533#define HAVE_DECL_SYS_NERR 0
20534#define HAVE_DECL_GETENV 1
20535#define SIZEOF_SIZE_T 8
20536#define SIZEOF_PTRDIFF_T 8
20537#define SIZEOF_DEV_T 8
20538#define PRI_SIZE_PREFIX "z"
20539#define PRI_PTRDIFF_PREFIX "t"
20540#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
20541#define HAVE_STRUCT_STAT_ST_BLOCKS 1
20542#define HAVE_STRUCT_STAT_ST_RDEV 1
20543#define SIZEOF_STRUCT_STAT_ST_SIZE SIZEOF_OFF_T
20544#define SIZEOF_STRUCT_STAT_ST_BLOCKS SIZEOF_OFF_T
20545#define SIZEOF_STRUCT_STAT_ST_INO SIZEOF_LONG
20546#define SIZEOF_STRUCT_STAT_ST_DEV SIZEOF_DEV_T
20547#define SIZEOF_STRUCT_STAT_ST_RDEV SIZEOF_DEV_T
20548#define HAVE_STRUCT_STAT_ST_ATIM 1
20549#define HAVE_STRUCT_STAT_ST_MTIM 1
20550#define HAVE_STRUCT_STAT_ST_CTIM 1
20551#define HAVE_STRUCT_STATX_STX_BTIME 1
20552#define HAVE_STRUCT_TIMEVAL 1
20553#define SIZEOF_STRUCT_TIMEVAL_TV_SEC SIZEOF_TIME_T
20554#define HAVE_STRUCT_TIMESPEC 1
20555#define HAVE_STRUCT_TIMEZONE 1
20556#define HAVE_RB_FD_INIT 1
20557#define HAVE_INT8_T 1
20558#define SIZEOF_INT8_T 1
20559#define HAVE_UINT8_T 1
20560#define SIZEOF_UINT8_T 1
20561#define HAVE_INT16_T 1
20562#define SIZEOF_INT16_T 2
20563#define HAVE_UINT16_T 1
20564#define SIZEOF_UINT16_T 2
20565#define HAVE_INT32_T 1
20566#define SIZEOF_INT32_T 4
20567#define HAVE_UINT32_T 1
20568#define SIZEOF_UINT32_T 4
20569#define HAVE_INT64_T 1
20570#define SIZEOF_INT64_T 8
20571#define HAVE_UINT64_T 1
20572#define SIZEOF_UINT64_T 8
20573#define HAVE_INT128_T 1
20574#define int128_t __int128
20575#define SIZEOF_INT128_T SIZEOF___INT128
20576#define HAVE_UINT128_T 1
20577#define uint128_t unsigned __int128
20578#define SIZEOF_UINT128_T SIZEOF___INT128
20579#define HAVE_INTPTR_T 1
20580#define SIZEOF_INTPTR_T 8
20581#define HAVE_UINTPTR_T 1
20582#define SIZEOF_UINTPTR_T 8
20583#define HAVE_SSIZE_T 1
20584#define SIZEOF_SSIZE_T 8
20585#define STACK_END_ADDRESS __libc_stack_end
20586#define GETGROUPS_T gid_t
20587#define HAVE_ALLOCA_H 1
20588#define HAVE_ALLOCA 1
20589#define HAVE_DUP 1
20590#define HAVE_DUP2 1
20591#define HAVE_ACOSH 1
20592#define HAVE_CBRT 1
20593#define HAVE_CRYPT 1
20594#define HAVE_ERF 1
20595#define HAVE_EXPLICIT_BZERO 1
20596#define HAVE_FFS 1
20597#define HAVE_FLOCK 1
20598#define HAVE_HYPOT 1
20599#define HAVE_LGAMMA_R 1
20600#define HAVE_MEMMOVE 1
20601#define HAVE_NAN 1
20602#define HAVE_NEXTAFTER 1
20603#define HAVE_STRCHR 1
20604#define HAVE_STRERROR 1
20605#define HAVE_STRSTR 1
20606#define HAVE_TGAMMA 1
20607#define HAVE_ISFINITE 1
20608#define SPT_TYPE SPT_REUSEARGV
20609#define HAVE_SIGNBIT 1
20610#define HAVE_FORK 1
20611#define HAVE_VFORK 1
20612#define HAVE_WORKING_VFORK 1
20613#define HAVE_WORKING_FORK 1
20614#define HAVE__LONGJMP 1
20615#define HAVE_ATAN2L 1
20616#define HAVE_ATAN2F 1
20617#define HAVE_CHROOT 1
20618#define HAVE_CLOCK_GETTIME 1
20619#define HAVE_COPY_FILE_RANGE 1
20620#define HAVE_COSH 1
20621#define HAVE_CRYPT_R 1
20622#define HAVE_DIRFD 1
20623#define HAVE_DL_ITERATE_PHDR 1
20624#define HAVE_DLOPEN 1
20625#define HAVE_DLADDR 1
20626#define HAVE_DUP3 1
20627#define HAVE_EACCESS 1
20628#define HAVE_ENDGRENT 1
20629#define HAVE_EVENTFD 1
20630#define HAVE_FCHMOD 1
20631#define HAVE_FCHOWN 1
20632#define HAVE_FCNTL 1
20633#define HAVE_FDATASYNC 1
20634#define HAVE_FDOPENDIR 1
20635#define HAVE_FMOD 1
20636#define HAVE_FSTATAT 1
20637#define HAVE_FSYNC 1
20638#define HAVE_FTRUNCATE 1
20639#define HAVE_FTRUNCATE64 1
20640#define HAVE_GETCWD 1
20641#define HAVE_GETENTROPY 1
20642#define HAVE_GETGRNAM 1
20643#define HAVE_GETGRNAM_R 1
20644#define HAVE_GETGROUPS 1
20645#define HAVE_GETLOGIN 1
20646#define HAVE_GETLOGIN_R 1
20647#define HAVE_GETPGID 1
20648#define HAVE_GETPGRP 1
20649#define HAVE_GETPRIORITY 1
20650#define HAVE_GETPWNAM 1
20651#define HAVE_GETPWNAM_R 1
20652#define HAVE_GETPWUID 1
20653#define HAVE_GETPWUID_R 1
20654#define HAVE_GETRANDOM 1
20655#define HAVE_GETRESGID 1
20656#define HAVE_GETRESUID 1
20657#define HAVE_GETRLIMIT 1
20658#define HAVE_GETSID 1
20659#define HAVE_GETTIMEOFDAY 1
20660#define HAVE_GMTIME_R 1
20661#define HAVE_GRANTPT 1
20662#define HAVE_INITGROUPS 1
20663#define HAVE_IOCTL 1
20664#define HAVE_KILLPG 1
20665#define HAVE_LCHMOD 1
20666#define HAVE_LCHOWN 1
20667#define HAVE_LINK 1
20668#define HAVE_LLABS 1
20669#define HAVE_LOCKF 1
20670#define HAVE_LOG2 1
20671#define HAVE_LSTAT 1
20672#define HAVE_LUTIMES 1
20673#define HAVE_MALLOC_USABLE_SIZE 1
20674#define HAVE_MBLEN 1
20675#define HAVE_MEMALIGN 1
20676#define HAVE_WRITEV 1
20677#define HAVE_MEMRCHR 1
20678#define HAVE_MEMMEM 1
20679#define HAVE_MKFIFO 1
20680#define HAVE_MKNOD 1
20681#define HAVE_MKTIME 1
20682#define HAVE_MMAP 1
20683#define HAVE_OPENAT 1
20684#define HAVE_PIPE2 1
20685#define HAVE_POLL 1
20686#define HAVE_POSIX_FADVISE 1
20687#define HAVE_POSIX_MEMALIGN 1
20688#define HAVE_PPOLL 1
20689#define HAVE_PREAD 1
20690#define HAVE_PWRITE 1
20691#define HAVE_QSORT_R 1
20692#define HAVE_READLINK 1
20693#define HAVE_REALPATH 1
20694#define HAVE_ROUND 1
20695#define HAVE_SCHED_GETAFFINITY 1
20696#define HAVE_SEEKDIR 1
20697#define HAVE_SENDFILE 1
20698#define HAVE_SETEGID 1
20699#define HAVE_SETENV 1
20700#define HAVE_SETEUID 1
20701#define HAVE_SETGID 1
20702#define HAVE_SETGROUPS 1
20703#define HAVE_SETPGID 1
20704#define HAVE_SETPGRP 1
20705#define HAVE_SETREGID 1
20706#define HAVE_SETRESGID 1
20707#define HAVE_SETRESUID 1
20708#define HAVE_SETREUID 1
20709#define HAVE_SETRLIMIT 1
20710#define HAVE_SETSID 1
20711#define HAVE_SETUID 1
20712#define HAVE_SHUTDOWN 1
20713#define HAVE_SIGACTION 1
20714#define HAVE_SIGALTSTACK 1
20715#define HAVE_SIGPROCMASK 1
20716#define HAVE_SINH 1
20717#define HAVE_SYMLINK 1
20718#define HAVE_SYSCALL 1
20719#define HAVE_SYSCONF 1
20720#define HAVE_TANH 1
20721#define HAVE_TELLDIR 1
20722#define HAVE_TIMEGM 1
20723#define HAVE_TIMES 1
20724#define HAVE_TRUNCATE 1
20725#define HAVE_TRUNCATE64 1
20726#define HAVE_UNSETENV 1
20727#define HAVE_UTIMENSAT 1
20728#define HAVE_UTIMES 1
20729#define HAVE_WAIT4 1
20730#define HAVE_WAITPID 1
20731#define HAVE_STATX 1
20732#define HAVE_CRYPT_H 1
20733#define HAVE_STRUCT_CRYPT_DATA_INITIALIZED 1
20734#define HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN 1
20735#define HAVE_BUILTIN___BUILTIN_ASSUME_ALIGNED 1
20736#define HAVE_BUILTIN___BUILTIN_BSWAP16 1
20737#define HAVE_BUILTIN___BUILTIN_BSWAP32 1
20738#define HAVE_BUILTIN___BUILTIN_BSWAP64 1
20739#define HAVE_BUILTIN___BUILTIN_POPCOUNT 1
20740#define HAVE_BUILTIN___BUILTIN_POPCOUNTLL 1
20741#define HAVE_BUILTIN___BUILTIN_CLZ 1
20742#define HAVE_BUILTIN___BUILTIN_CLZL 1
20743#define HAVE_BUILTIN___BUILTIN_CLZLL 1
20744#define HAVE_BUILTIN___BUILTIN_CTZ 1
20745#define HAVE_BUILTIN___BUILTIN_CTZLL 1
20746#define HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW 1
20747#define HAVE_BUILTIN___BUILTIN_SUB_OVERFLOW 1
20748#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW 1
20749#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW_P 1
20750#define HAVE_BUILTIN___BUILTIN_CONSTANT_P 1
20751#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR 1
20752#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P 1
20753#define HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P 1
20754#define HAVE_BUILTIN___BUILTIN_TRAP 1
20755#define HAVE_BUILTIN___BUILTIN_EXPECT 1
20756#define HAVE_GNU_QSORT_R 1
20757#define ATAN2_INF_C99 1
20758#define HAVE_CLOCK_GETRES 1
20759#define HAVE_LIBRT 1
20760#define HAVE_LIBRT 1
20761#define HAVE_TIMER_CREATE 1
20762#define HAVE_TIMER_SETTIME 1
20763#define HAVE_STRUCT_TM_TM_ZONE 1
20764#define HAVE_TM_ZONE 1
20765#define HAVE_STRUCT_TM_TM_GMTOFF 1
20766#define HAVE_DAYLIGHT 1
20767#define NEGATIVE_TIME_T 1
20768#define POSIX_SIGNAL 1
20769#define HAVE_SIG_T 1
20770#define RSHIFT(x,y) ((x)>>(int)(y))
20771#define USE_COPY_FILE_RANGE 1
20772#define HAVE__SC_CLK_TCK 1
20773#define STACK_GROW_DIRECTION -1
20774#define COROUTINE_H "coroutine/amd64/Context.h"
20775#define _REENTRANT 1
20776#define _THREAD_SAFE 1
20777#define HAVE_LIBPTHREAD 1
20778#define HAVE_SCHED_YIELD 1
20779#define HAVE_PTHREAD_ATTR_SETINHERITSCHED 1
20780#define HAVE_PTHREAD_ATTR_GETSTACK 1
20781#define HAVE_PTHREAD_ATTR_GETGUARDSIZE 1
20782#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1
20783#define HAVE_PTHREAD_SETNAME_NP 1
20784#define HAVE_PTHREAD_SIGMASK 1
20785#define HAVE_PTHREAD_GETATTR_NP 1
20786#define SET_CURRENT_THREAD_NAME(name) pthread_setname_np(pthread_self(), name)
20787#define SET_ANOTHER_THREAD_NAME(thid,name) pthread_setname_np(thid, name)
20788#define DEFINE_MCONTEXT_PTR(mc,uc) mcontext_t *mc = &(uc)->uc_mcontext
20789#define HAVE_GETCONTEXT 1
20790#define HAVE_SETCONTEXT 1
20791#define HAVE_SYS_USER_H 1
20792#define HAVE_CONST_PAGE_SIZE 1
20793#define IOCTL_REQ_TYPE unsigned long
20794#define NUM2IOCTLREQ(num) NUM2ULONG(num)
20795#define USE_ELF 1
20796#define HAVE_ELF_H 1
20797#define HAVE_LIBZ 1
20798#define HAVE_BACKTRACE 1
20799#define HAVE_VALGRIND_MEMCHECK_H 1
20800#define DLEXT_MAXLEN 3
20801#define DLEXT ".so"
20802#define HAVE__SETJMP 1
20803#define RUBY_SETJMP(env) __builtin_setjmp((env))
20804#define RUBY_LONGJMP(env,val) __builtin_longjmp((env),val)
20805#define USE_MJIT 1
20806#define HAVE_PTHREAD_H 1
20807#define THREAD_IMPL_H "thread_pthread.h"
20808#define THREAD_IMPL_SRC "thread_pthread.c"
20809#define RUBY_PLATFORM "x86_64-linux"
20810#define RBIMPL_COMPILER_SINCE_H
20811#define RBIMPL_COMPILER_IS_H
20812#define RBIMPL_COMPILER_IS(cc) RBIMPL_COMPILER_IS_ ## cc
20813#define RBIMPL_COMPILER_IS_APPLE_H
20814#define RBIMPL_COMPILER_IS_Apple 0
20815#define RBIMPL_COMPILER_IS_CLANG_H
20816#define RBIMPL_COMPILER_IS_Clang 0
20817#define RBIMPL_COMPILER_IS_GCC_H
20818#define RBIMPL_COMPILER_IS_INTEL_H
20819#define RBIMPL_COMPILER_IS_Intel 0
20820#define RBIMPL_COMPILER_IS_GCC 1
20821#define RBIMPL_COMPILER_VERSION_MAJOR __GNUC__
20822#define RBIMPL_COMPILER_VERSION_MINOR __GNUC_MINOR__
20823#define RBIMPL_COMPILER_VERSION_PATCH __GNUC_PATCHLEVEL__
20824#define RBIMPL_COMPILER_IS_MSVC_H
20825#define RBIMPL_COMPILER_IS_MSVC 0
20826#define RBIMPL_COMPILER_IS_SUNPRO_H
20827#define RBIMPL_COMPILER_IS_SunPro 0
20828#define RBIMPL_COMPILER_SINCE(cc,x,y,z) (RBIMPL_COMPILER_IS(cc) && ((RBIMPL_COMPILER_VERSION_MAJOR > (x)) || ((RBIMPL_COMPILER_VERSION_MAJOR == (x)) && ((RBIMPL_COMPILER_VERSION_MINOR > (y)) || ((RBIMPL_COMPILER_VERSION_MINOR == (y)) && (RBIMPL_COMPILER_VERSION_PATCH >= (z)))))))
20829#define RBIMPL_COMPILER_BEFORE(cc,x,y,z) (RBIMPL_COMPILER_IS(cc) && ((RBIMPL_COMPILER_VERSION_MAJOR < (x)) || ((RBIMPL_COMPILER_VERSION_MAJOR == (x)) && ((RBIMPL_COMPILER_VERSION_MINOR < (y)) || ((RBIMPL_COMPILER_VERSION_MINOR == (y)) && (RBIMPL_COMPILER_VERSION_PATCH < (z)))))))
20830#undef HAVE_PROTOTYPES
20831#define HAVE_PROTOTYPES 1
20832#undef HAVE_STDARG_PROTOTYPES
20833#define HAVE_STDARG_PROTOTYPES 1
20834#undef TOKEN_PASTE
20835#define TOKEN_PASTE(x,y) x ##y
20836#define STRINGIZE(expr) STRINGIZE0(expr)
20837#define STRINGIZE0(expr) #expr
20838#define UNALIGNED_WORD_ACCESS 1
20839#define RBIMPL_TEST3(q,w,e,...) e
20840#define RBIMPL_TEST2(...) RBIMPL_TEST3(__VA_OPT__(,),1,0,0)
20841#define RBIMPL_TEST1() RBIMPL_TEST2("ruby")
20842#define HAVE___VA_OPT__
20843#undef RBIMPL_TEST1
20844#undef RBIMPL_TEST2
20845#undef RBIMPL_TEST3
20846#define USE_RVARGC 0
20847#define _STDARG_H
20848#define _ANSI_STDARG_H_
20849#undef __need___va_list
20850#define __GNUC_VA_LIST
20851#define va_start(v,l) __builtin_va_start(v,l)
20852#define va_end(v) __builtin_va_end(v)
20853#define va_arg(v,l) __builtin_va_arg(v,l)
20854#define va_copy(d,s) __builtin_va_copy(d,s)
20855#define __va_copy(d,s) __builtin_va_copy(d,s)
20856#define _VA_LIST_
20857#define _VA_LIST
20858#define _VA_LIST_DEFINED
20859#define _VA_LIST_T_H
20860#define __va_list__
20861#define RUBY_DEFINES_H 1
20862#define _STDIO_H 1
20863#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
20864#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
20865#define _FEATURES_H 1
20866#undef __USE_ISOC11
20867#undef __USE_ISOC99
20868#undef __USE_ISOC95
20869#undef __USE_ISOCXX11
20870#undef __USE_POSIX
20871#undef __USE_POSIX2
20872#undef __USE_POSIX199309
20873#undef __USE_POSIX199506
20874#undef __USE_XOPEN
20875#undef __USE_XOPEN_EXTENDED
20876#undef __USE_UNIX98
20877#undef __USE_XOPEN2K
20878#undef __USE_XOPEN2KXSI
20879#undef __USE_XOPEN2K8
20880#undef __USE_XOPEN2K8XSI
20881#undef __USE_LARGEFILE
20882#undef __USE_LARGEFILE64
20883#undef __USE_FILE_OFFSET64
20884#undef __USE_MISC
20885#undef __USE_ATFILE
20886#undef __USE_GNU
20887#undef __USE_FORTIFY_LEVEL
20888#undef __KERNEL_STRICT_NAMES
20889#undef __GLIBC_USE_ISOC2X
20890#undef __GLIBC_USE_DEPRECATED_GETS
20891#undef __GLIBC_USE_DEPRECATED_SCANF
20892#define __KERNEL_STRICT_NAMES
20893#define __GNUC_PREREQ(maj,min) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
20894#define __glibc_clang_prereq(maj,min) 0
20895#define __GLIBC_USE(F) __GLIBC_USE_ ## F
20896#undef _ISOC95_SOURCE
20897#define _ISOC95_SOURCE 1
20898#undef _ISOC99_SOURCE
20899#define _ISOC99_SOURCE 1
20900#undef _ISOC11_SOURCE
20901#define _ISOC11_SOURCE 1
20902#undef _ISOC2X_SOURCE
20903#define _ISOC2X_SOURCE 1
20904#undef _POSIX_SOURCE
20905#define _POSIX_SOURCE 1
20906#undef _POSIX_C_SOURCE
20907#define _POSIX_C_SOURCE 200809L
20908#undef _XOPEN_SOURCE
20909#define _XOPEN_SOURCE 700
20910#undef _XOPEN_SOURCE_EXTENDED
20911#define _XOPEN_SOURCE_EXTENDED 1
20912#undef _LARGEFILE64_SOURCE
20913#define _LARGEFILE64_SOURCE 1
20914#undef _DEFAULT_SOURCE
20915#define _DEFAULT_SOURCE 1
20916#undef _ATFILE_SOURCE
20917#define _ATFILE_SOURCE 1
20918#undef _DEFAULT_SOURCE
20919#define _DEFAULT_SOURCE 1
20920#define __GLIBC_USE_ISOC2X 1
20921#define __USE_ISOC11 1
20922#define __USE_ISOC99 1
20923#define __USE_ISOC95 1
20924#undef _POSIX_SOURCE
20925#define _POSIX_SOURCE 1
20926#undef _POSIX_C_SOURCE
20927#define _POSIX_C_SOURCE 200809L
20928#define __USE_POSIX 1
20929#define __USE_POSIX2 1
20930#define __USE_POSIX199309 1
20931#define __USE_POSIX199506 1
20932#define __USE_XOPEN2K 1
20933#undef __USE_ISOC95
20934#define __USE_ISOC95 1
20935#undef __USE_ISOC99
20936#define __USE_ISOC99 1
20937#define __USE_XOPEN2K8 1
20938#undef _ATFILE_SOURCE
20939#define _ATFILE_SOURCE 1
20940#define __USE_XOPEN 1
20941#define __USE_XOPEN_EXTENDED 1
20942#define __USE_UNIX98 1
20943#undef _LARGEFILE_SOURCE
20944#define _LARGEFILE_SOURCE 1
20945#define __USE_XOPEN2K8 1
20946#define __USE_XOPEN2K8XSI 1
20947#define __USE_XOPEN2K 1
20948#define __USE_XOPEN2KXSI 1
20949#undef __USE_ISOC95
20950#define __USE_ISOC95 1
20951#undef __USE_ISOC99
20952#define __USE_ISOC99 1
20953#define __USE_LARGEFILE 1
20954#define __USE_LARGEFILE64 1
20955#define __USE_MISC 1
20956#define __USE_ATFILE 1
20957#define __USE_GNU 1
20958#define __USE_FORTIFY_LEVEL 2
20959#define __GLIBC_USE_DEPRECATED_GETS 0
20960#define __GLIBC_USE_DEPRECATED_SCANF 0
20961#undef __GNU_LIBRARY__
20962#define __GNU_LIBRARY__ 6
20963#define __GLIBC__ 2
20964#define __GLIBC_MINOR__ 33
20965#define __GLIBC_PREREQ(maj,min) ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
20966#define _SYS_CDEFS_H 1
20967#undef __P
20968#undef __PMT
20969#define __LEAF , __leaf__
20970#define __LEAF_ATTR __attribute__ ((__leaf__))
20971#define __THROW __attribute__ ((__nothrow__ __LEAF))
20972#define __THROWNL __attribute__ ((__nothrow__))
20973#define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct
20974#define __NTHNL(fct) __attribute__ ((__nothrow__)) fct
20975#define __glibc_clang_has_extension(ext) 0
20976#define __P(args) args
20977#define __PMT(args) args
20978#define __CONCAT(x,y) x ## y
20979#define __STRING(x) #x
20980#define __ptr_t void *
20981#define __BEGIN_DECLS
20982#define __END_DECLS
20983#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
20984#define __bos0(ptr) __builtin_object_size (ptr, 0)
20985#define __glibc_objsize0(__o) __bos0 (__o)
20986#define __glibc_objsize(__o) __bos (__o)
20987#define __warnattr(msg) __attribute__((__warning__ (msg)))
20988#define __errordecl(name,msg) extern void name (void) __attribute__((__error__ (msg)))
20989#define __flexarr []
20990#define __glibc_c99_flexarr_available 1
20991#define __REDIRECT(name,proto,alias) name proto __asm__ (__ASMNAME (#alias))
20992#define __REDIRECT_NTH(name,proto,alias) name proto __asm__ (__ASMNAME (#alias)) __THROW
20993#define __REDIRECT_NTHNL(name,proto,alias) name proto __asm__ (__ASMNAME (#alias)) __THROWNL
20994#define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
20995#define __ASMNAME2(prefix,cname) __STRING (prefix) cname
20996#define __attribute_malloc__ __attribute__ ((__malloc__))
20997#define __attribute_alloc_size__(params) __attribute__ ((__alloc_size__ params))
20998#define __attribute_pure__ __attribute__ ((__pure__))
20999#define __attribute_const__ __attribute__ ((__const__))
21000#define __attribute_used__ __attribute__ ((__used__))
21001#define __attribute_noinline__ __attribute__ ((__noinline__))
21002#define __attribute_deprecated__ __attribute__ ((__deprecated__))
21003#define __attribute_deprecated_msg__(msg) __attribute__ ((__deprecated__ (msg)))
21004#define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
21005#define __attribute_format_strfmon__(a,b) __attribute__ ((__format__ (__strfmon__, a, b)))
21006#define __nonnull(params) __attribute__ ((__nonnull__ params))
21007#define __attribute_warn_unused_result__ __attribute__ ((__warn_unused_result__))
21008#define __wur __attribute_warn_unused_result__
21009#undef __always_inline
21010#define __always_inline __inline __attribute__ ((__always_inline__))
21011#define __attribute_artificial__ __attribute__ ((__artificial__))
21012#define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
21013#define __extern_always_inline extern __always_inline __attribute__ ((__gnu_inline__))
21014#define __fortify_function __extern_always_inline __attribute_artificial__
21015#define __va_arg_pack() __builtin_va_arg_pack ()
21016#define __va_arg_pack_len() __builtin_va_arg_pack_len ()
21017#define __restrict_arr __restrict
21018#define __glibc_unlikely(cond) __builtin_expect ((cond), 0)
21019#define __glibc_likely(cond) __builtin_expect ((cond), 1)
21020#define __glibc_has_attribute(attr) __has_attribute (attr)
21021#define __attribute_nonstring__ __attribute__ ((__nonstring__))
21022#undef __attribute_copy__
21023#define __attribute_copy__(arg) __attribute__ ((__copy__ (arg)))
21024#define __WORDSIZE 64
21025#define __WORDSIZE_TIME64_COMPAT32 1
21026#define __SYSCALL_WORDSIZE 64
21027#define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0
21028#define __LDBL_REDIR1(name,proto,alias) name proto
21029#define __LDBL_REDIR(name,proto) name proto
21030#define __LDBL_REDIR1_NTH(name,proto,alias) name proto __THROW
21031#define __LDBL_REDIR_NTH(name,proto) name proto __THROW
21032#define __LDBL_REDIR2_DECL(name)
21033#define __LDBL_REDIR_DECL(name)
21034#define __REDIRECT_LDBL(name,proto,alias) __REDIRECT (name, proto, alias)
21035#define __REDIRECT_NTH_LDBL(name,proto,alias) __REDIRECT_NTH (name, proto, alias)
21036#define __glibc_macro_warning1(message) _Pragma (#message)
21037#define __glibc_macro_warning(message) __glibc_macro_warning1 (GCC warning message)
21038#define __HAVE_GENERIC_SELECTION 1
21039#define __attr_access(x) __attribute__ ((__access__ x))
21040#define __attribute_returns_twice__ __attribute__ ((__returns_twice__))
21041#define __USE_EXTERN_INLINES 1
21042#define __stub___compat_bdflush
21043#define __stub_chflags
21044#define __stub_fchflags
21045#define __stub_gtty
21046#define __stub_revoke
21047#define __stub_setlogin
21048#define __stub_sigreturn
21049#define __stub_stty
21050#undef __GLIBC_USE_LIB_EXT2
21051#define __GLIBC_USE_LIB_EXT2 1
21052#undef __GLIBC_USE_IEC_60559_BFP_EXT
21053#define __GLIBC_USE_IEC_60559_BFP_EXT 1
21054#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X
21055#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1
21056#undef __GLIBC_USE_IEC_60559_FUNCS_EXT
21057#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1
21058#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X
21059#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1
21060#undef __GLIBC_USE_IEC_60559_TYPES_EXT
21061#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
21062#define __need_size_t
21063#define __need_NULL
21064#define __size_t__
21065#define __SIZE_T__
21066#define _SIZE_T
21067#define _SYS_SIZE_T_H
21068#define _T_SIZE_
21069#define _T_SIZE
21070#define __SIZE_T
21071#define _SIZE_T_
21072#define _BSD_SIZE_T_
21073#define _SIZE_T_DEFINED_
21074#define _SIZE_T_DEFINED
21075#define _BSD_SIZE_T_DEFINED_
21076#define _SIZE_T_DECLARED
21077#define ___int_size_t_h
21078#define _GCC_SIZE_T
21079#define _SIZET_
21080#define __size_t
21081#undef __need_size_t
21082#undef NULL
21083#define NULL ((void *)0)
21084#undef __need_NULL
21085#define __need___va_list
21086#define _BITS_TYPES_H 1
21087#define __WORDSIZE 64
21088#define __WORDSIZE_TIME64_COMPAT32 1
21089#define __SYSCALL_WORDSIZE 64
21090#define __TIMESIZE __WORDSIZE
21091#define __S16_TYPE short int
21092#define __U16_TYPE unsigned short int
21093#define __S32_TYPE int
21094#define __U32_TYPE unsigned int
21095#define __SLONGWORD_TYPE long int
21096#define __ULONGWORD_TYPE unsigned long int
21097#define __SQUAD_TYPE long int
21098#define __UQUAD_TYPE unsigned long int
21099#define __SWORD_TYPE long int
21100#define __UWORD_TYPE unsigned long int
21101#define __SLONG32_TYPE int
21102#define __ULONG32_TYPE unsigned int
21103#define __S64_TYPE long int
21104#define __U64_TYPE unsigned long int
21105#define __STD_TYPE typedef
21106#define _BITS_TYPESIZES_H 1
21107#define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE
21108#define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE
21109#define __DEV_T_TYPE __UQUAD_TYPE
21110#define __UID_T_TYPE __U32_TYPE
21111#define __GID_T_TYPE __U32_TYPE
21112#define __INO_T_TYPE __SYSCALL_ULONG_TYPE
21113#define __INO64_T_TYPE __UQUAD_TYPE
21114#define __MODE_T_TYPE __U32_TYPE
21115#define __NLINK_T_TYPE __SYSCALL_ULONG_TYPE
21116#define __FSWORD_T_TYPE __SYSCALL_SLONG_TYPE
21117#define __OFF_T_TYPE __SYSCALL_SLONG_TYPE
21118#define __OFF64_T_TYPE __SQUAD_TYPE
21119#define __PID_T_TYPE __S32_TYPE
21120#define __RLIM_T_TYPE __SYSCALL_ULONG_TYPE
21121#define __RLIM64_T_TYPE __UQUAD_TYPE
21122#define __BLKCNT_T_TYPE __SYSCALL_SLONG_TYPE
21123#define __BLKCNT64_T_TYPE __SQUAD_TYPE
21124#define __FSBLKCNT_T_TYPE __SYSCALL_ULONG_TYPE
21125#define __FSBLKCNT64_T_TYPE __UQUAD_TYPE
21126#define __FSFILCNT_T_TYPE __SYSCALL_ULONG_TYPE
21127#define __FSFILCNT64_T_TYPE __UQUAD_TYPE
21128#define __ID_T_TYPE __U32_TYPE
21129#define __CLOCK_T_TYPE __SYSCALL_SLONG_TYPE
21130#define __TIME_T_TYPE __SYSCALL_SLONG_TYPE
21131#define __USECONDS_T_TYPE __U32_TYPE
21132#define __SUSECONDS_T_TYPE __SYSCALL_SLONG_TYPE
21133#define __SUSECONDS64_T_TYPE __SQUAD_TYPE
21134#define __DADDR_T_TYPE __S32_TYPE
21135#define __KEY_T_TYPE __S32_TYPE
21136#define __CLOCKID_T_TYPE __S32_TYPE
21137#define __TIMER_T_TYPE void *
21138#define __BLKSIZE_T_TYPE __SYSCALL_SLONG_TYPE
21139#define __FSID_T_TYPE struct { int __val[2]; }
21140#define __SSIZE_T_TYPE __SWORD_TYPE
21141#define __CPU_MASK_TYPE __SYSCALL_ULONG_TYPE
21142#define __OFF_T_MATCHES_OFF64_T 1
21143#define __INO_T_MATCHES_INO64_T 1
21144#define __RLIM_T_MATCHES_RLIM64_T 1
21145#define __STATFS_MATCHES_STATFS64 1
21146#define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1
21147#define __FD_SETSIZE 1024
21148#define _BITS_TIME64_H 1
21149#define __TIME64_T_TYPE __TIME_T_TYPE
21150#undef __STD_TYPE
21151#define _____fpos_t_defined 1
21152#define ____mbstate_t_defined 1
21153#define _____fpos64_t_defined 1
21154#define ____FILE_defined 1
21155#define __FILE_defined 1
21156#define __struct_FILE_defined 1
21157#define __getc_unlocked_body(_fp) (__glibc_unlikely ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end) ? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++)
21158#define __putc_unlocked_body(_ch,_fp) (__glibc_unlikely ((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end) ? __overflow (_fp, (unsigned char) (_ch)) : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch)))
21159#define _IO_EOF_SEEN 0x0010
21160#define __feof_unlocked_body(_fp) (((_fp)->_flags & _IO_EOF_SEEN) != 0)
21161#define _IO_ERR_SEEN 0x0020
21162#define __ferror_unlocked_body(_fp) (((_fp)->_flags & _IO_ERR_SEEN) != 0)
21163#define _IO_USER_LOCK 0x8000
21164#define __cookie_io_functions_t_defined 1
21165#define __off_t_defined
21166#define __off64_t_defined
21167#define __ssize_t_defined
21168#define _IOFBF 0
21169#define _IOLBF 1
21170#define _IONBF 2
21171#define BUFSIZ 8192
21172#define EOF (-1)
21173#define SEEK_SET 0
21174#define SEEK_CUR 1
21175#define SEEK_END 2
21176#define SEEK_DATA 3
21177#define SEEK_HOLE 4
21178#define P_tmpdir "/tmp"
21179#define _BITS_STDIO_LIM_H 1
21180#define L_tmpnam 20
21181#define TMP_MAX 238328
21182#define FILENAME_MAX 4096
21183#define L_ctermid 9
21184#define L_cuserid 9
21185#undef FOPEN_MAX
21186#define FOPEN_MAX 16
21187#define stdin stdin
21188#define stdout stdout
21189#define stderr stderr
21190#define RENAME_NOREPLACE (1 << 0)
21191#define RENAME_EXCHANGE (1 << 1)
21192#define RENAME_WHITEOUT (1 << 2)
21193#define _BITS_FLOATN_H
21194#define __HAVE_FLOAT128 1
21195#define __HAVE_DISTINCT_FLOAT128 1
21196#define __HAVE_FLOAT64X 1
21197#define __HAVE_FLOAT64X_LONG_DOUBLE 1
21198#define __f128(x) x ##f128
21199#define __CFLOAT128 _Complex _Float128
21200#define _BITS_FLOATN_COMMON_H
21201#define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0
21202#define __HAVE_FLOAT16 0
21203#define __HAVE_FLOAT32 1
21204#define __HAVE_FLOAT64 1
21205#define __HAVE_FLOAT32X 1
21206#define __HAVE_FLOAT128X 0
21207#define __HAVE_DISTINCT_FLOAT16 __HAVE_FLOAT16
21208#define __HAVE_DISTINCT_FLOAT32 0
21209#define __HAVE_DISTINCT_FLOAT64 0
21210#define __HAVE_DISTINCT_FLOAT32X 0
21211#define __HAVE_DISTINCT_FLOAT64X 0
21212#define __HAVE_DISTINCT_FLOAT128X __HAVE_FLOAT128X
21213#define __HAVE_FLOAT128_UNLIKE_LDBL (__HAVE_DISTINCT_FLOAT128 && __LDBL_MANT_DIG__ != 113)
21214#define __HAVE_FLOATN_NOT_TYPEDEF 1
21215#define __f32(x) x ##f32
21216#define __f64(x) x ##f64
21217#define __f32x(x) x ##f32x
21218#define __f64x(x) x ##f64x
21219#define __CFLOAT32 _Complex _Float32
21220#define __CFLOAT64 _Complex _Float64
21221#define __CFLOAT32X _Complex _Float32x
21222#define __CFLOAT64X _Complex _Float64x
21223#define _BITS_STDIO_H 1
21224#define __STDIO_INLINE __extern_inline
21225#define fread_unlocked(ptr,size,n,stream) (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n) && (size_t) (size) * (size_t) (n) <= 8 && (size_t) (size) != 0) ? ({ char *__ptr = (char *) (ptr); FILE *__stream = (stream); size_t __cnt; for (__cnt = (size_t) (size) * (size_t) (n); __cnt > 0; --__cnt) { int __c = getc_unlocked (__stream); if (__c == EOF) break; *__ptr++ = __c; } ((size_t) (size) * (size_t) (n) - __cnt) / (size_t) (size); }) : (((__builtin_constant_p (size) && (size_t) (size) == 0) || (__builtin_constant_p (n) && (size_t) (n) == 0)) ? ((void) (ptr), (void) (stream), (void) (size), (void) (n), (size_t) 0) : fread_unlocked (ptr, size, n, stream))))
21226#define fwrite_unlocked(ptr,size,n,stream) (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n) && (size_t) (size) * (size_t) (n) <= 8 && (size_t) (size) != 0) ? ({ const char *__ptr = (const char *) (ptr); FILE *__stream = (stream); size_t __cnt; for (__cnt = (size_t) (size) * (size_t) (n); __cnt > 0; --__cnt) if (putc_unlocked (*__ptr++, __stream) == EOF) break; ((size_t) (size) * (size_t) (n) - __cnt) / (size_t) (size); }) : (((__builtin_constant_p (size) && (size_t) (size) == 0) || (__builtin_constant_p (n) && (size_t) (n) == 0)) ? ((void) (ptr), (void) (stream), (void) (size), (void) (n), (size_t) 0) : fwrite_unlocked (ptr, size, n, stream))))
21227#undef __STDIO_INLINE
21228#define _BITS_STDIO2_H 1
21229#undef fread_unlocked
21230#define _SYS_TYPES_H 1
21231#define __u_char_defined
21232#define __ino_t_defined
21233#define __ino64_t_defined
21234#define __dev_t_defined
21235#define __gid_t_defined
21236#define __mode_t_defined
21237#define __nlink_t_defined
21238#define __uid_t_defined
21239#define __pid_t_defined
21240#define __id_t_defined
21241#define __daddr_t_defined
21242#define __key_t_defined
21243#define __clock_t_defined 1
21244#define __clockid_t_defined 1
21245#define __time_t_defined 1
21246#define __timer_t_defined 1
21247#define __useconds_t_defined
21248#define __suseconds_t_defined
21249#define __need_size_t
21250#undef __need_size_t
21251#undef __need_NULL
21252#define _BITS_STDINT_INTN_H 1
21253#define __BIT_TYPES_DEFINED__ 1
21254#define _ENDIAN_H 1
21255#define _BITS_ENDIAN_H 1
21256#define __LITTLE_ENDIAN 1234
21257#define __BIG_ENDIAN 4321
21258#define __PDP_ENDIAN 3412
21259#define _BITS_ENDIANNESS_H 1
21260#define __BYTE_ORDER __LITTLE_ENDIAN
21261#define __FLOAT_WORD_ORDER __BYTE_ORDER
21262#define __LONG_LONG_PAIR(HI,LO) LO, HI
21263#define LITTLE_ENDIAN __LITTLE_ENDIAN
21264#define BIG_ENDIAN __BIG_ENDIAN
21265#define PDP_ENDIAN __PDP_ENDIAN
21266#define BYTE_ORDER __BYTE_ORDER
21267#define _BITS_BYTESWAP_H 1
21268#define __bswap_constant_16(x) ((__uint16_t) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)))
21269#define __bswap_constant_32(x) ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) | (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24))
21270#define __bswap_constant_64(x) ((((x) & 0xff00000000000000ull) >> 56) | (((x) & 0x00ff000000000000ull) >> 40) | (((x) & 0x0000ff0000000000ull) >> 24) | (((x) & 0x000000ff00000000ull) >> 8) | (((x) & 0x00000000ff000000ull) << 8) | (((x) & 0x0000000000ff0000ull) << 24) | (((x) & 0x000000000000ff00ull) << 40) | (((x) & 0x00000000000000ffull) << 56))
21271#define _BITS_UINTN_IDENTITY_H 1
21272#define htobe16(x) __bswap_16 (x)
21273#define htole16(x) __uint16_identity (x)
21274#define be16toh(x) __bswap_16 (x)
21275#define le16toh(x) __uint16_identity (x)
21276#define htobe32(x) __bswap_32 (x)
21277#define htole32(x) __uint32_identity (x)
21278#define be32toh(x) __bswap_32 (x)
21279#define le32toh(x) __uint32_identity (x)
21280#define htobe64(x) __bswap_64 (x)
21281#define htole64(x) __uint64_identity (x)
21282#define be64toh(x) __bswap_64 (x)
21283#define le64toh(x) __uint64_identity (x)
21284#define _SYS_SELECT_H 1
21285#define __FD_ZERO(s) do { unsigned int __i; fd_set *__arr = (s); for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) __FDS_BITS (__arr)[__i] = 0; } while (0)
21286#define __FD_SET(d,s) ((void) (__FDS_BITS (s)[__FD_ELT(d)] |= __FD_MASK(d)))
21287#define __FD_CLR(d,s) ((void) (__FDS_BITS (s)[__FD_ELT(d)] &= ~__FD_MASK(d)))
21288#define __FD_ISSET(d,s) ((__FDS_BITS (s)[__FD_ELT (d)] & __FD_MASK (d)) != 0)
21289#define __sigset_t_defined 1
21290#define ____sigset_t_defined
21291#define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
21292#define __timeval_defined 1
21293#define _STRUCT_TIMESPEC 1
21294#undef __NFDBITS
21295#define __NFDBITS (8 * (int) sizeof (__fd_mask))
21296#define __FD_ELT(d) ((d) / __NFDBITS)
21297#define __FD_MASK(d) ((__fd_mask) (1UL << ((d) % __NFDBITS)))
21298#define __FDS_BITS(set) ((set)->fds_bits)
21299#define FD_SETSIZE __FD_SETSIZE
21300#define NFDBITS __NFDBITS
21301#define FD_SET(fd,fdsetp) __FD_SET (fd, fdsetp)
21302#define FD_CLR(fd,fdsetp) __FD_CLR (fd, fdsetp)
21303#define FD_ISSET(fd,fdsetp) __FD_ISSET (fd, fdsetp)
21304#define FD_ZERO(fdsetp) __FD_ZERO (fdsetp)
21305#undef __FD_ELT
21306#define __FD_ELT(d) __extension__ ({ long int __d = (d); (__builtin_constant_p (__d) ? (0 <= __d && __d < __FD_SETSIZE ? (__d / __NFDBITS) : __fdelt_warn (__d)) : __fdelt_chk (__d)); })
21307#define __blksize_t_defined
21308#define __blkcnt_t_defined
21309#define __fsblkcnt_t_defined
21310#define __fsfilcnt_t_defined
21311#define _BITS_PTHREADTYPES_COMMON_H 1
21312#define _THREAD_SHARED_TYPES_H 1
21313#define _BITS_PTHREADTYPES_ARCH_H 1
21314#define __WORDSIZE 64
21315#define __WORDSIZE_TIME64_COMPAT32 1
21316#define __SYSCALL_WORDSIZE 64
21317#define __SIZEOF_PTHREAD_MUTEX_T 40
21318#define __SIZEOF_PTHREAD_ATTR_T 56
21319#define __SIZEOF_PTHREAD_RWLOCK_T 56
21320#define __SIZEOF_PTHREAD_BARRIER_T 32
21321#define __SIZEOF_PTHREAD_MUTEXATTR_T 4
21322#define __SIZEOF_PTHREAD_COND_T 48
21323#define __SIZEOF_PTHREAD_CONDATTR_T 4
21324#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
21325#define __SIZEOF_PTHREAD_BARRIERATTR_T 4
21326#define __LOCK_ALIGNMENT
21327#define __ONCE_ALIGNMENT
21328#define _THREAD_MUTEX_INTERNAL_H 1
21329#define __PTHREAD_MUTEX_HAVE_PREV 1
21330#define __PTHREAD_MUTEX_INITIALIZER(__kind) 0, 0, 0, 0, __kind, 0, 0, { 0, 0 }
21331#define _RWLOCK_INTERNAL_H
21332#define __PTHREAD_RWLOCK_ELISION_EXTRA 0, { 0, 0, 0, 0, 0, 0, 0 }
21333#define __PTHREAD_RWLOCK_INITIALIZER(__flags) 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, __flags
21334#define __ONCE_FLAG_INIT { 0 }
21335#define __have_pthread_attr_t 1
21336#define _SYS_STAT_H 1
21337#define _BITS_STAT_H 1
21338#define _BITS_STRUCT_STAT_H 1
21339#define st_atime st_atim.tv_sec
21340#define st_mtime st_mtim.tv_sec
21341#define st_ctime st_ctim.tv_sec
21342#define _STATBUF_ST_BLKSIZE
21343#define _STATBUF_ST_RDEV
21344#define _STATBUF_ST_NSEC
21345#define __S_IFMT 0170000
21346#define __S_IFDIR 0040000
21347#define __S_IFCHR 0020000
21348#define __S_IFBLK 0060000
21349#define __S_IFREG 0100000
21350#define __S_IFIFO 0010000
21351#define __S_IFLNK 0120000
21352#define __S_IFSOCK 0140000
21353#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode)
21354#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
21355#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
21356#define __S_ISUID 04000
21357#define __S_ISGID 02000
21358#define __S_ISVTX 01000
21359#define __S_IREAD 0400
21360#define __S_IWRITE 0200
21361#define __S_IEXEC 0100
21362#define UTIME_NOW ((1l << 30) - 1l)
21363#define UTIME_OMIT ((1l << 30) - 2l)
21364#define S_IFMT __S_IFMT
21365#define S_IFDIR __S_IFDIR
21366#define S_IFCHR __S_IFCHR
21367#define S_IFBLK __S_IFBLK
21368#define S_IFREG __S_IFREG
21369#define S_IFIFO __S_IFIFO
21370#define S_IFLNK __S_IFLNK
21371#define S_IFSOCK __S_IFSOCK
21372#define __S_ISTYPE(mode,mask) (((mode) & __S_IFMT) == (mask))
21373#define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR)
21374#define S_ISCHR(mode) __S_ISTYPE((mode), __S_IFCHR)
21375#define S_ISBLK(mode) __S_ISTYPE((mode), __S_IFBLK)
21376#define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG)
21377#define S_ISFIFO(mode) __S_ISTYPE((mode), __S_IFIFO)
21378#define S_ISLNK(mode) __S_ISTYPE((mode), __S_IFLNK)
21379#define S_ISSOCK(mode) __S_ISTYPE((mode), __S_IFSOCK)
21380#define S_TYPEISMQ(buf) __S_TYPEISMQ(buf)
21381#define S_TYPEISSEM(buf) __S_TYPEISSEM(buf)
21382#define S_TYPEISSHM(buf) __S_TYPEISSHM(buf)
21383#define S_ISUID __S_ISUID
21384#define S_ISGID __S_ISGID
21385#define S_ISVTX __S_ISVTX
21386#define S_IRUSR __S_IREAD
21387#define S_IWUSR __S_IWRITE
21388#define S_IXUSR __S_IEXEC
21389#define S_IRWXU (__S_IREAD|__S_IWRITE|__S_IEXEC)
21390#define S_IREAD S_IRUSR
21391#define S_IWRITE S_IWUSR
21392#define S_IEXEC S_IXUSR
21393#define S_IRGRP (S_IRUSR >> 3)
21394#define S_IWGRP (S_IWUSR >> 3)
21395#define S_IXGRP (S_IXUSR >> 3)
21396#define S_IRWXG (S_IRWXU >> 3)
21397#define S_IROTH (S_IRGRP >> 3)
21398#define S_IWOTH (S_IWGRP >> 3)
21399#define S_IXOTH (S_IXGRP >> 3)
21400#define S_IRWXO (S_IRWXG >> 3)
21401#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO)
21402#define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)
21403#define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
21404#define S_BLKSIZE 512
21405#define _LINUX_STAT_H
21406#define _LINUX_TYPES_H
21407#define _ASM_GENERIC_TYPES_H
21408#define _ASM_GENERIC_INT_LL64_H
21409#define __ASM_X86_BITSPERLONG_H
21410#define __BITS_PER_LONG 64
21411#define __ASM_GENERIC_BITS_PER_LONG
21412#define _LINUX_POSIX_TYPES_H
21413#undef __FD_SETSIZE
21414#define __FD_SETSIZE 1024
21415#define _ASM_X86_POSIX_TYPES_64_H
21416#define __kernel_old_uid_t __kernel_old_uid_t
21417#define __kernel_old_dev_t __kernel_old_dev_t
21418#define __ASM_GENERIC_POSIX_TYPES_H
21419#define __bitwise__
21420#define __bitwise __bitwise__
21421#define __aligned_u64 __u64 __attribute__((aligned(8)))
21422#define __aligned_be64 __be64 __attribute__((aligned(8)))
21423#define __aligned_le64 __le64 __attribute__((aligned(8)))
21424#define STATX_TYPE 0x00000001U
21425#define STATX_MODE 0x00000002U
21426#define STATX_NLINK 0x00000004U
21427#define STATX_UID 0x00000008U
21428#define STATX_GID 0x00000010U
21429#define STATX_ATIME 0x00000020U
21430#define STATX_MTIME 0x00000040U
21431#define STATX_CTIME 0x00000080U
21432#define STATX_INO 0x00000100U
21433#define STATX_SIZE 0x00000200U
21434#define STATX_BLOCKS 0x00000400U
21435#define STATX_BASIC_STATS 0x000007ffU
21436#define STATX_BTIME 0x00000800U
21437#define STATX_MNT_ID 0x00001000U
21438#define STATX__RESERVED 0x80000000U
21439#define STATX_ALL 0x00000fffU
21440#define STATX_ATTR_COMPRESSED 0x00000004
21441#define STATX_ATTR_IMMUTABLE 0x00000010
21442#define STATX_ATTR_APPEND 0x00000020
21443#define STATX_ATTR_NODUMP 0x00000040
21444#define STATX_ATTR_ENCRYPTED 0x00000800
21445#define STATX_ATTR_AUTOMOUNT 0x00001000
21446#define STATX_ATTR_MOUNT_ROOT 0x00002000
21447#define STATX_ATTR_VERITY 0x00100000
21448#define STATX_ATTR_DAX 0x00200000
21449#define __statx_timestamp_defined 1
21450#define __statx_defined 1
21451#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
21452#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
21453#undef __GLIBC_USE_LIB_EXT2
21454#define __GLIBC_USE_LIB_EXT2 1
21455#undef __GLIBC_USE_IEC_60559_BFP_EXT
21456#define __GLIBC_USE_IEC_60559_BFP_EXT 1
21457#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X
21458#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1
21459#undef __GLIBC_USE_IEC_60559_FUNCS_EXT
21460#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1
21461#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X
21462#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1
21463#undef __GLIBC_USE_IEC_60559_TYPES_EXT
21464#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
21465#define __need_size_t
21466#define __need_wchar_t
21467#define __need_NULL
21468#undef __need_size_t
21469#define __wchar_t__
21470#define __WCHAR_T__
21471#define _WCHAR_T
21472#define _T_WCHAR_
21473#define _T_WCHAR
21474#define __WCHAR_T
21475#define _WCHAR_T_
21476#define _BSD_WCHAR_T_
21477#define _WCHAR_T_DEFINED_
21478#define _WCHAR_T_DEFINED
21479#define _WCHAR_T_H
21480#define ___int_wchar_t_h
21481#define __INT_WCHAR_T_H
21482#define _GCC_WCHAR_T
21483#define _WCHAR_T_DECLARED
21484#undef _BSD_WCHAR_T_
21485#undef __need_wchar_t
21486#undef NULL
21487#define NULL ((void *)0)
21488#undef __need_NULL
21489#define _STDLIB_H 1
21490#define WNOHANG 1
21491#define WUNTRACED 2
21492#define WSTOPPED 2
21493#define WEXITED 4
21494#define WCONTINUED 8
21495#define WNOWAIT 0x01000000
21496#define __WNOTHREAD 0x20000000
21497#define __WALL 0x40000000
21498#define __WCLONE 0x80000000
21499#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
21500#define __WTERMSIG(status) ((status) & 0x7f)
21501#define __WSTOPSIG(status) __WEXITSTATUS(status)
21502#define __WIFEXITED(status) (__WTERMSIG(status) == 0)
21503#define __WIFSIGNALED(status) (((signed char) (((status) & 0x7f) + 1) >> 1) > 0)
21504#define __WIFSTOPPED(status) (((status) & 0xff) == 0x7f)
21505#define __WIFCONTINUED(status) ((status) == __W_CONTINUED)
21506#define __WCOREDUMP(status) ((status) & __WCOREFLAG)
21507#define __W_EXITCODE(ret,sig) ((ret) << 8 | (sig))
21508#define __W_STOPCODE(sig) ((sig) << 8 | 0x7f)
21509#define __W_CONTINUED 0xffff
21510#define __WCOREFLAG 0x80
21511#define WEXITSTATUS(status) __WEXITSTATUS (status)
21512#define WTERMSIG(status) __WTERMSIG (status)
21513#define WSTOPSIG(status) __WSTOPSIG (status)
21514#define WIFEXITED(status) __WIFEXITED (status)
21515#define WIFSIGNALED(status) __WIFSIGNALED (status)
21516#define WIFSTOPPED(status) __WIFSTOPPED (status)
21517#define WIFCONTINUED(status) __WIFCONTINUED (status)
21518#define __ldiv_t_defined 1
21519#define __lldiv_t_defined 1
21520#define RAND_MAX 2147483647
21521#define EXIT_FAILURE 1
21522#define EXIT_SUCCESS 0
21523#define MB_CUR_MAX (__ctype_get_mb_cur_max ())
21524#define _BITS_TYPES_LOCALE_T_H 1
21525#define _BITS_TYPES___LOCALE_T_H 1
21526#define _ALLOCA_H 1
21527#define __need_size_t
21528#undef __need_size_t
21529#undef __need_NULL
21530#undef alloca
21531#define alloca(size) __builtin_alloca (size)
21532#define __COMPAR_FN_T
21533#define __STDLIB_MB_LEN_MAX 16
21534#define _STDDEF_H
21535#define _STDDEF_H_
21536#define _ANSI_STDDEF_H
21537#define _PTRDIFF_T
21538#define _T_PTRDIFF_
21539#define _T_PTRDIFF
21540#define __PTRDIFF_T
21541#define _PTRDIFF_T_
21542#define _BSD_PTRDIFF_T_
21543#define ___int_ptrdiff_t_h
21544#define _GCC_PTRDIFF_T
21545#define _PTRDIFF_T_DECLARED
21546#undef __need_ptrdiff_t
21547#undef __need_size_t
21548#undef __need_wchar_t
21549#undef NULL
21550#define NULL ((void *)0)
21551#undef __need_NULL
21552#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
21553#define _STRING_H 1
21554#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
21555#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
21556#undef __GLIBC_USE_LIB_EXT2
21557#define __GLIBC_USE_LIB_EXT2 1
21558#undef __GLIBC_USE_IEC_60559_BFP_EXT
21559#define __GLIBC_USE_IEC_60559_BFP_EXT 1
21560#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X
21561#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1
21562#undef __GLIBC_USE_IEC_60559_FUNCS_EXT
21563#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1
21564#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X
21565#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1
21566#undef __GLIBC_USE_IEC_60559_TYPES_EXT
21567#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
21568#define __need_size_t
21569#define __need_NULL
21570#undef __need_ptrdiff_t
21571#undef __need_size_t
21572#undef __need_wchar_t
21573#undef NULL
21574#define NULL ((void *)0)
21575#undef __need_NULL
21576#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
21577#define strdupa(s) (__extension__ ({ const char *__old = (s); size_t __len = strlen (__old) + 1; char *__new = (char *) __builtin_alloca (__len); (char *) memcpy (__new, __old, __len); }))
21578#define strndupa(s,n) (__extension__ ({ const char *__old = (s); size_t __len = strnlen (__old, (n)); char *__new = (char *) __builtin_alloca (__len + 1); __new[__len] = '\0'; (char *) memcpy (__new, __old, __len); }))
21579#define _STRINGS_H 1
21580#define __need_size_t
21581#undef __need_ptrdiff_t
21582#undef __need_size_t
21583#undef __need_wchar_t
21584#undef NULL
21585#define NULL ((void *)0)
21586#undef __need_NULL
21587#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
21588#define __STRINGS_FORTIFIED 1
21589#define _BITS_STRING_FORTIFIED_H 1
21590#define _INTTYPES_H 1
21591#define _STDINT_H 1
21592#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
21593#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
21594#undef __GLIBC_USE_LIB_EXT2
21595#define __GLIBC_USE_LIB_EXT2 1
21596#undef __GLIBC_USE_IEC_60559_BFP_EXT
21597#define __GLIBC_USE_IEC_60559_BFP_EXT 1
21598#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X
21599#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1
21600#undef __GLIBC_USE_IEC_60559_FUNCS_EXT
21601#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1
21602#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X
21603#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1
21604#undef __GLIBC_USE_IEC_60559_TYPES_EXT
21605#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
21606#define _BITS_WCHAR_H 1
21607#define __WCHAR_MAX __WCHAR_MAX__
21608#define __WCHAR_MIN __WCHAR_MIN__
21609#define __WORDSIZE 64
21610#define __WORDSIZE_TIME64_COMPAT32 1
21611#define __SYSCALL_WORDSIZE 64
21612#define _BITS_STDINT_UINTN_H 1
21613#define __intptr_t_defined
21614#define __INT64_C(c) c ## L
21615#define __UINT64_C(c) c ## UL
21616#define INT8_MIN (-128)
21617#define INT16_MIN (-32767-1)
21618#define INT32_MIN (-2147483647-1)
21619#define INT64_MIN (-__INT64_C(9223372036854775807)-1)
21620#define INT8_MAX (127)
21621#define INT16_MAX (32767)
21622#define INT32_MAX (2147483647)
21623#define INT64_MAX (__INT64_C(9223372036854775807))
21624#define UINT8_MAX (255)
21625#define UINT16_MAX (65535)
21626#define UINT32_MAX (4294967295U)
21627#define UINT64_MAX (__UINT64_C(18446744073709551615))
21628#define INT_LEAST8_MIN (-128)
21629#define INT_LEAST16_MIN (-32767-1)
21630#define INT_LEAST32_MIN (-2147483647-1)
21631#define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1)
21632#define INT_LEAST8_MAX (127)
21633#define INT_LEAST16_MAX (32767)
21634#define INT_LEAST32_MAX (2147483647)
21635#define INT_LEAST64_MAX (__INT64_C(9223372036854775807))
21636#define UINT_LEAST8_MAX (255)
21637#define UINT_LEAST16_MAX (65535)
21638#define UINT_LEAST32_MAX (4294967295U)
21639#define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615))
21640#define INT_FAST8_MIN (-128)
21641#define INT_FAST16_MIN (-9223372036854775807L-1)
21642#define INT_FAST32_MIN (-9223372036854775807L-1)
21643#define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1)
21644#define INT_FAST8_MAX (127)
21645#define INT_FAST16_MAX (9223372036854775807L)
21646#define INT_FAST32_MAX (9223372036854775807L)
21647#define INT_FAST64_MAX (__INT64_C(9223372036854775807))
21648#define UINT_FAST8_MAX (255)
21649#define UINT_FAST16_MAX (18446744073709551615UL)
21650#define UINT_FAST32_MAX (18446744073709551615UL)
21651#define UINT_FAST64_MAX (__UINT64_C(18446744073709551615))
21652#define INTPTR_MIN (-9223372036854775807L-1)
21653#define INTPTR_MAX (9223372036854775807L)
21654#define UINTPTR_MAX (18446744073709551615UL)
21655#define INTMAX_MIN (-__INT64_C(9223372036854775807)-1)
21656#define INTMAX_MAX (__INT64_C(9223372036854775807))
21657#define UINTMAX_MAX (__UINT64_C(18446744073709551615))
21658#define PTRDIFF_MIN (-9223372036854775807L-1)
21659#define PTRDIFF_MAX (9223372036854775807L)
21660#define SIG_ATOMIC_MIN (-2147483647-1)
21661#define SIG_ATOMIC_MAX (2147483647)
21662#define SIZE_MAX (18446744073709551615UL)
21663#define WCHAR_MIN __WCHAR_MIN
21664#define WCHAR_MAX __WCHAR_MAX
21665#define WINT_MIN (0u)
21666#define WINT_MAX (4294967295u)
21667#define INT8_C(c) c
21668#define INT16_C(c) c
21669#define INT32_C(c) c
21670#define INT64_C(c) c ## L
21671#define UINT8_C(c) c
21672#define UINT16_C(c) c
21673#define UINT32_C(c) c ## U
21674#define UINT64_C(c) c ## UL
21675#define INTMAX_C(c) c ## L
21676#define UINTMAX_C(c) c ## UL
21677#define INT8_WIDTH 8
21678#define UINT8_WIDTH 8
21679#define INT16_WIDTH 16
21680#define UINT16_WIDTH 16
21681#define INT32_WIDTH 32
21682#define UINT32_WIDTH 32
21683#define INT64_WIDTH 64
21684#define UINT64_WIDTH 64
21685#define INT_LEAST8_WIDTH 8
21686#define UINT_LEAST8_WIDTH 8
21687#define INT_LEAST16_WIDTH 16
21688#define UINT_LEAST16_WIDTH 16
21689#define INT_LEAST32_WIDTH 32
21690#define UINT_LEAST32_WIDTH 32
21691#define INT_LEAST64_WIDTH 64
21692#define UINT_LEAST64_WIDTH 64
21693#define INT_FAST8_WIDTH 8
21694#define UINT_FAST8_WIDTH 8
21695#define INT_FAST16_WIDTH __WORDSIZE
21696#define UINT_FAST16_WIDTH __WORDSIZE
21697#define INT_FAST32_WIDTH __WORDSIZE
21698#define UINT_FAST32_WIDTH __WORDSIZE
21699#define INT_FAST64_WIDTH 64
21700#define UINT_FAST64_WIDTH 64
21701#define INTPTR_WIDTH __WORDSIZE
21702#define UINTPTR_WIDTH __WORDSIZE
21703#define INTMAX_WIDTH 64
21704#define UINTMAX_WIDTH 64
21705#define PTRDIFF_WIDTH __WORDSIZE
21706#define SIG_ATOMIC_WIDTH 32
21707#define SIZE_WIDTH __WORDSIZE
21708#define WCHAR_WIDTH 32
21709#define WINT_WIDTH 32
21710#define _GCC_WRAP_STDINT_H
21711#define ____gwchar_t_defined 1
21712#define __PRI64_PREFIX "l"
21713#define __PRIPTR_PREFIX "l"
21714#define PRId8 "d"
21715#define PRId16 "d"
21716#define PRId32 "d"
21717#define PRId64 __PRI64_PREFIX "d"
21718#define PRIdLEAST8 "d"
21719#define PRIdLEAST16 "d"
21720#define PRIdLEAST32 "d"
21721#define PRIdLEAST64 __PRI64_PREFIX "d"
21722#define PRIdFAST8 "d"
21723#define PRIdFAST16 __PRIPTR_PREFIX "d"
21724#define PRIdFAST32 __PRIPTR_PREFIX "d"
21725#define PRIdFAST64 __PRI64_PREFIX "d"
21726#define PRIi8 "i"
21727#define PRIi16 "i"
21728#define PRIi32 "i"
21729#define PRIi64 __PRI64_PREFIX "i"
21730#define PRIiLEAST8 "i"
21731#define PRIiLEAST16 "i"
21732#define PRIiLEAST32 "i"
21733#define PRIiLEAST64 __PRI64_PREFIX "i"
21734#define PRIiFAST8 "i"
21735#define PRIiFAST16 __PRIPTR_PREFIX "i"
21736#define PRIiFAST32 __PRIPTR_PREFIX "i"
21737#define PRIiFAST64 __PRI64_PREFIX "i"
21738#define PRIo8 "o"
21739#define PRIo16 "o"
21740#define PRIo32 "o"
21741#define PRIo64 __PRI64_PREFIX "o"
21742#define PRIoLEAST8 "o"
21743#define PRIoLEAST16 "o"
21744#define PRIoLEAST32 "o"
21745#define PRIoLEAST64 __PRI64_PREFIX "o"
21746#define PRIoFAST8 "o"
21747#define PRIoFAST16 __PRIPTR_PREFIX "o"
21748#define PRIoFAST32 __PRIPTR_PREFIX "o"
21749#define PRIoFAST64 __PRI64_PREFIX "o"
21750#define PRIu8 "u"
21751#define PRIu16 "u"
21752#define PRIu32 "u"
21753#define PRIu64 __PRI64_PREFIX "u"
21754#define PRIuLEAST8 "u"
21755#define PRIuLEAST16 "u"
21756#define PRIuLEAST32 "u"
21757#define PRIuLEAST64 __PRI64_PREFIX "u"
21758#define PRIuFAST8 "u"
21759#define PRIuFAST16 __PRIPTR_PREFIX "u"
21760#define PRIuFAST32 __PRIPTR_PREFIX "u"
21761#define PRIuFAST64 __PRI64_PREFIX "u"
21762#define PRIx8 "x"
21763#define PRIx16 "x"
21764#define PRIx32 "x"
21765#define PRIx64 __PRI64_PREFIX "x"
21766#define PRIxLEAST8 "x"
21767#define PRIxLEAST16 "x"
21768#define PRIxLEAST32 "x"
21769#define PRIxLEAST64 __PRI64_PREFIX "x"
21770#define PRIxFAST8 "x"
21771#define PRIxFAST16 __PRIPTR_PREFIX "x"
21772#define PRIxFAST32 __PRIPTR_PREFIX "x"
21773#define PRIxFAST64 __PRI64_PREFIX "x"
21774#define PRIX8 "X"
21775#define PRIX16 "X"
21776#define PRIX32 "X"
21777#define PRIX64 __PRI64_PREFIX "X"
21778#define PRIXLEAST8 "X"
21779#define PRIXLEAST16 "X"
21780#define PRIXLEAST32 "X"
21781#define PRIXLEAST64 __PRI64_PREFIX "X"
21782#define PRIXFAST8 "X"
21783#define PRIXFAST16 __PRIPTR_PREFIX "X"
21784#define PRIXFAST32 __PRIPTR_PREFIX "X"
21785#define PRIXFAST64 __PRI64_PREFIX "X"
21786#define PRIdMAX __PRI64_PREFIX "d"
21787#define PRIiMAX __PRI64_PREFIX "i"
21788#define PRIoMAX __PRI64_PREFIX "o"
21789#define PRIuMAX __PRI64_PREFIX "u"
21790#define PRIxMAX __PRI64_PREFIX "x"
21791#define PRIXMAX __PRI64_PREFIX "X"
21792#define PRIdPTR __PRIPTR_PREFIX "d"
21793#define PRIiPTR __PRIPTR_PREFIX "i"
21794#define PRIoPTR __PRIPTR_PREFIX "o"
21795#define PRIuPTR __PRIPTR_PREFIX "u"
21796#define PRIxPTR __PRIPTR_PREFIX "x"
21797#define PRIXPTR __PRIPTR_PREFIX "X"
21798#define SCNd8 "hhd"
21799#define SCNd16 "hd"
21800#define SCNd32 "d"
21801#define SCNd64 __PRI64_PREFIX "d"
21802#define SCNdLEAST8 "hhd"
21803#define SCNdLEAST16 "hd"
21804#define SCNdLEAST32 "d"
21805#define SCNdLEAST64 __PRI64_PREFIX "d"
21806#define SCNdFAST8 "hhd"
21807#define SCNdFAST16 __PRIPTR_PREFIX "d"
21808#define SCNdFAST32 __PRIPTR_PREFIX "d"
21809#define SCNdFAST64 __PRI64_PREFIX "d"
21810#define SCNi8 "hhi"
21811#define SCNi16 "hi"
21812#define SCNi32 "i"
21813#define SCNi64 __PRI64_PREFIX "i"
21814#define SCNiLEAST8 "hhi"
21815#define SCNiLEAST16 "hi"
21816#define SCNiLEAST32 "i"
21817#define SCNiLEAST64 __PRI64_PREFIX "i"
21818#define SCNiFAST8 "hhi"
21819#define SCNiFAST16 __PRIPTR_PREFIX "i"
21820#define SCNiFAST32 __PRIPTR_PREFIX "i"
21821#define SCNiFAST64 __PRI64_PREFIX "i"
21822#define SCNu8 "hhu"
21823#define SCNu16 "hu"
21824#define SCNu32 "u"
21825#define SCNu64 __PRI64_PREFIX "u"
21826#define SCNuLEAST8 "hhu"
21827#define SCNuLEAST16 "hu"
21828#define SCNuLEAST32 "u"
21829#define SCNuLEAST64 __PRI64_PREFIX "u"
21830#define SCNuFAST8 "hhu"
21831#define SCNuFAST16 __PRIPTR_PREFIX "u"
21832#define SCNuFAST32 __PRIPTR_PREFIX "u"
21833#define SCNuFAST64 __PRI64_PREFIX "u"
21834#define SCNo8 "hho"
21835#define SCNo16 "ho"
21836#define SCNo32 "o"
21837#define SCNo64 __PRI64_PREFIX "o"
21838#define SCNoLEAST8 "hho"
21839#define SCNoLEAST16 "ho"
21840#define SCNoLEAST32 "o"
21841#define SCNoLEAST64 __PRI64_PREFIX "o"
21842#define SCNoFAST8 "hho"
21843#define SCNoFAST16 __PRIPTR_PREFIX "o"
21844#define SCNoFAST32 __PRIPTR_PREFIX "o"
21845#define SCNoFAST64 __PRI64_PREFIX "o"
21846#define SCNx8 "hhx"
21847#define SCNx16 "hx"
21848#define SCNx32 "x"
21849#define SCNx64 __PRI64_PREFIX "x"
21850#define SCNxLEAST8 "hhx"
21851#define SCNxLEAST16 "hx"
21852#define SCNxLEAST32 "x"
21853#define SCNxLEAST64 __PRI64_PREFIX "x"
21854#define SCNxFAST8 "hhx"
21855#define SCNxFAST16 __PRIPTR_PREFIX "x"
21856#define SCNxFAST32 __PRIPTR_PREFIX "x"
21857#define SCNxFAST64 __PRI64_PREFIX "x"
21858#define SCNdMAX __PRI64_PREFIX "d"
21859#define SCNiMAX __PRI64_PREFIX "i"
21860#define SCNoMAX __PRI64_PREFIX "o"
21861#define SCNuMAX __PRI64_PREFIX "u"
21862#define SCNxMAX __PRI64_PREFIX "x"
21863#define SCNdPTR __PRIPTR_PREFIX "d"
21864#define SCNiPTR __PRIPTR_PREFIX "i"
21865#define SCNoPTR __PRIPTR_PREFIX "o"
21866#define SCNuPTR __PRIPTR_PREFIX "u"
21867#define SCNxPTR __PRIPTR_PREFIX "x"
21868#define _STDALIGN_H
21869#define alignas _Alignas
21870#define alignof _Alignof
21871#define __alignas_is_defined 1
21872#define __alignof_is_defined 1
21873#define _UNISTD_H 1
21874#define _POSIX_VERSION 200809L
21875#define __POSIX2_THIS_VERSION 200809L
21876#define _POSIX2_VERSION __POSIX2_THIS_VERSION
21877#define _POSIX2_C_VERSION __POSIX2_THIS_VERSION
21878#define _POSIX2_C_BIND __POSIX2_THIS_VERSION
21879#define _POSIX2_C_DEV __POSIX2_THIS_VERSION
21880#define _POSIX2_SW_DEV __POSIX2_THIS_VERSION
21881#define _POSIX2_LOCALEDEF __POSIX2_THIS_VERSION
21882#define _XOPEN_VERSION 700
21883#define _XOPEN_XCU_VERSION 4
21884#define _XOPEN_XPG2 1
21885#define _XOPEN_XPG3 1
21886#define _XOPEN_XPG4 1
21887#define _XOPEN_UNIX 1
21888#define _XOPEN_ENH_I18N 1
21889#define _XOPEN_LEGACY 1
21890#define _BITS_POSIX_OPT_H 1
21891#define _POSIX_JOB_CONTROL 1
21892#define _POSIX_SAVED_IDS 1
21893#define _POSIX_PRIORITY_SCHEDULING 200809L
21894#define _POSIX_SYNCHRONIZED_IO 200809L
21895#define _POSIX_FSYNC 200809L
21896#define _POSIX_MAPPED_FILES 200809L
21897#define _POSIX_MEMLOCK 200809L
21898#define _POSIX_MEMLOCK_RANGE 200809L
21899#define _POSIX_MEMORY_PROTECTION 200809L
21900#define _POSIX_CHOWN_RESTRICTED 0
21901#define _POSIX_VDISABLE '\0'
21902#define _POSIX_NO_TRUNC 1
21903#define _XOPEN_REALTIME 1
21904#define _XOPEN_REALTIME_THREADS 1
21905#define _XOPEN_SHM 1
21906#define _POSIX_THREADS 200809L
21907#define _POSIX_REENTRANT_FUNCTIONS 1
21908#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L
21909#define _POSIX_THREAD_PRIORITY_SCHEDULING 200809L
21910#define _POSIX_THREAD_ATTR_STACKSIZE 200809L
21911#define _POSIX_THREAD_ATTR_STACKADDR 200809L
21912#define _POSIX_THREAD_PRIO_INHERIT 200809L
21913#define _POSIX_THREAD_PRIO_PROTECT 200809L
21914#define _POSIX_THREAD_ROBUST_PRIO_INHERIT 200809L
21915#define _POSIX_THREAD_ROBUST_PRIO_PROTECT -1
21916#define _POSIX_SEMAPHORES 200809L
21917#define _POSIX_REALTIME_SIGNALS 200809L
21918#define _POSIX_ASYNCHRONOUS_IO 200809L
21919#define _POSIX_ASYNC_IO 1
21920#define _LFS_ASYNCHRONOUS_IO 1
21921#define _POSIX_PRIORITIZED_IO 200809L
21922#define _LFS64_ASYNCHRONOUS_IO 1
21923#define _LFS_LARGEFILE 1
21924#define _LFS64_LARGEFILE 1
21925#define _LFS64_STDIO 1
21926#define _POSIX_SHARED_MEMORY_OBJECTS 200809L
21927#define _POSIX_CPUTIME 0
21928#define _POSIX_THREAD_CPUTIME 0
21929#define _POSIX_REGEXP 1
21930#define _POSIX_READER_WRITER_LOCKS 200809L
21931#define _POSIX_SHELL 1
21932#define _POSIX_TIMEOUTS 200809L
21933#define _POSIX_SPIN_LOCKS 200809L
21934#define _POSIX_SPAWN 200809L
21935#define _POSIX_TIMERS 200809L
21936#define _POSIX_BARRIERS 200809L
21937#define _POSIX_MESSAGE_PASSING 200809L
21938#define _POSIX_THREAD_PROCESS_SHARED 200809L
21939#define _POSIX_MONOTONIC_CLOCK 0
21940#define _POSIX_CLOCK_SELECTION 200809L
21941#define _POSIX_ADVISORY_INFO 200809L
21942#define _POSIX_IPV6 200809L
21943#define _POSIX_RAW_SOCKETS 200809L
21944#define _POSIX2_CHAR_TERM 200809L
21945#define _POSIX_SPORADIC_SERVER -1
21946#define _POSIX_THREAD_SPORADIC_SERVER -1
21947#define _POSIX_TRACE -1
21948#define _POSIX_TRACE_EVENT_FILTER -1
21949#define _POSIX_TRACE_INHERIT -1
21950#define _POSIX_TRACE_LOG -1
21951#define _POSIX_TYPED_MEMORY_OBJECTS -1
21952#define __WORDSIZE 64
21953#define __WORDSIZE_TIME64_COMPAT32 1
21954#define __SYSCALL_WORDSIZE 64
21955#define _POSIX_V7_LPBIG_OFFBIG -1
21956#define _POSIX_V6_LPBIG_OFFBIG -1
21957#define _XBS5_LPBIG_OFFBIG -1
21958#define _POSIX_V7_LP64_OFF64 1
21959#define _POSIX_V6_LP64_OFF64 1
21960#define _XBS5_LP64_OFF64 1
21961#define __ILP32_OFF32_CFLAGS "-m32"
21962#define __ILP32_OFF32_LDFLAGS "-m32"
21963#define __ILP32_OFFBIG_CFLAGS "-m32 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
21964#define __ILP32_OFFBIG_LDFLAGS "-m32"
21965#define __LP64_OFF64_CFLAGS "-m64"
21966#define __LP64_OFF64_LDFLAGS "-m64"
21967#define STDIN_FILENO 0
21968#define STDOUT_FILENO 1
21969#define STDERR_FILENO 2
21970#define __need_size_t
21971#define __need_NULL
21972#undef __need_ptrdiff_t
21973#undef __need_size_t
21974#undef __need_wchar_t
21975#undef NULL
21976#define NULL ((void *)0)
21977#undef __need_NULL
21978#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
21979#define __socklen_t_defined
21980#define R_OK 4
21981#define W_OK 2
21982#define X_OK 1
21983#define F_OK 0
21984#define L_SET SEEK_SET
21985#define L_INCR SEEK_CUR
21986#define L_XTND SEEK_END
21987#define _PC_LINK_MAX _PC_LINK_MAX
21988#define _PC_MAX_CANON _PC_MAX_CANON
21989#define _PC_MAX_INPUT _PC_MAX_INPUT
21990#define _PC_NAME_MAX _PC_NAME_MAX
21991#define _PC_PATH_MAX _PC_PATH_MAX
21992#define _PC_PIPE_BUF _PC_PIPE_BUF
21993#define _PC_CHOWN_RESTRICTED _PC_CHOWN_RESTRICTED
21994#define _PC_NO_TRUNC _PC_NO_TRUNC
21995#define _PC_VDISABLE _PC_VDISABLE
21996#define _PC_SYNC_IO _PC_SYNC_IO
21997#define _PC_ASYNC_IO _PC_ASYNC_IO
21998#define _PC_PRIO_IO _PC_PRIO_IO
21999#define _PC_SOCK_MAXBUF _PC_SOCK_MAXBUF
22000#define _PC_FILESIZEBITS _PC_FILESIZEBITS
22001#define _PC_REC_INCR_XFER_SIZE _PC_REC_INCR_XFER_SIZE
22002#define _PC_REC_MAX_XFER_SIZE _PC_REC_MAX_XFER_SIZE
22003#define _PC_REC_MIN_XFER_SIZE _PC_REC_MIN_XFER_SIZE
22004#define _PC_REC_XFER_ALIGN _PC_REC_XFER_ALIGN
22005#define _PC_ALLOC_SIZE_MIN _PC_ALLOC_SIZE_MIN
22006#define _PC_SYMLINK_MAX _PC_SYMLINK_MAX
22007#define _PC_2_SYMLINKS _PC_2_SYMLINKS
22008#define _SC_ARG_MAX _SC_ARG_MAX
22009#define _SC_CHILD_MAX _SC_CHILD_MAX
22010#define _SC_CLK_TCK _SC_CLK_TCK
22011#define _SC_NGROUPS_MAX _SC_NGROUPS_MAX
22012#define _SC_OPEN_MAX _SC_OPEN_MAX
22013#define _SC_STREAM_MAX _SC_STREAM_MAX
22014#define _SC_TZNAME_MAX _SC_TZNAME_MAX
22015#define _SC_JOB_CONTROL _SC_JOB_CONTROL
22016#define _SC_SAVED_IDS _SC_SAVED_IDS
22017#define _SC_REALTIME_SIGNALS _SC_REALTIME_SIGNALS
22018#define _SC_PRIORITY_SCHEDULING _SC_PRIORITY_SCHEDULING
22019#define _SC_TIMERS _SC_TIMERS
22020#define _SC_ASYNCHRONOUS_IO _SC_ASYNCHRONOUS_IO
22021#define _SC_PRIORITIZED_IO _SC_PRIORITIZED_IO
22022#define _SC_SYNCHRONIZED_IO _SC_SYNCHRONIZED_IO
22023#define _SC_FSYNC _SC_FSYNC
22024#define _SC_MAPPED_FILES _SC_MAPPED_FILES
22025#define _SC_MEMLOCK _SC_MEMLOCK
22026#define _SC_MEMLOCK_RANGE _SC_MEMLOCK_RANGE
22027#define _SC_MEMORY_PROTECTION _SC_MEMORY_PROTECTION
22028#define _SC_MESSAGE_PASSING _SC_MESSAGE_PASSING
22029#define _SC_SEMAPHORES _SC_SEMAPHORES
22030#define _SC_SHARED_MEMORY_OBJECTS _SC_SHARED_MEMORY_OBJECTS
22031#define _SC_AIO_LISTIO_MAX _SC_AIO_LISTIO_MAX
22032#define _SC_AIO_MAX _SC_AIO_MAX
22033#define _SC_AIO_PRIO_DELTA_MAX _SC_AIO_PRIO_DELTA_MAX
22034#define _SC_DELAYTIMER_MAX _SC_DELAYTIMER_MAX
22035#define _SC_MQ_OPEN_MAX _SC_MQ_OPEN_MAX
22036#define _SC_MQ_PRIO_MAX _SC_MQ_PRIO_MAX
22037#define _SC_VERSION _SC_VERSION
22038#define _SC_PAGESIZE _SC_PAGESIZE
22039#define _SC_PAGE_SIZE _SC_PAGESIZE
22040#define _SC_RTSIG_MAX _SC_RTSIG_MAX
22041#define _SC_SEM_NSEMS_MAX _SC_SEM_NSEMS_MAX
22042#define _SC_SEM_VALUE_MAX _SC_SEM_VALUE_MAX
22043#define _SC_SIGQUEUE_MAX _SC_SIGQUEUE_MAX
22044#define _SC_TIMER_MAX _SC_TIMER_MAX
22045#define _SC_BC_BASE_MAX _SC_BC_BASE_MAX
22046#define _SC_BC_DIM_MAX _SC_BC_DIM_MAX
22047#define _SC_BC_SCALE_MAX _SC_BC_SCALE_MAX
22048#define _SC_BC_STRING_MAX _SC_BC_STRING_MAX
22049#define _SC_COLL_WEIGHTS_MAX _SC_COLL_WEIGHTS_MAX
22050#define _SC_EQUIV_CLASS_MAX _SC_EQUIV_CLASS_MAX
22051#define _SC_EXPR_NEST_MAX _SC_EXPR_NEST_MAX
22052#define _SC_LINE_MAX _SC_LINE_MAX
22053#define _SC_RE_DUP_MAX _SC_RE_DUP_MAX
22054#define _SC_CHARCLASS_NAME_MAX _SC_CHARCLASS_NAME_MAX
22055#define _SC_2_VERSION _SC_2_VERSION
22056#define _SC_2_C_BIND _SC_2_C_BIND
22057#define _SC_2_C_DEV _SC_2_C_DEV
22058#define _SC_2_FORT_DEV _SC_2_FORT_DEV
22059#define _SC_2_FORT_RUN _SC_2_FORT_RUN
22060#define _SC_2_SW_DEV _SC_2_SW_DEV
22061#define _SC_2_LOCALEDEF _SC_2_LOCALEDEF
22062#define _SC_PII _SC_PII
22063#define _SC_PII_XTI _SC_PII_XTI
22064#define _SC_PII_SOCKET _SC_PII_SOCKET
22065#define _SC_PII_INTERNET _SC_PII_INTERNET
22066#define _SC_PII_OSI _SC_PII_OSI
22067#define _SC_POLL _SC_POLL
22068#define _SC_SELECT _SC_SELECT
22069#define _SC_UIO_MAXIOV _SC_UIO_MAXIOV
22070#define _SC_IOV_MAX _SC_IOV_MAX
22071#define _SC_PII_INTERNET_STREAM _SC_PII_INTERNET_STREAM
22072#define _SC_PII_INTERNET_DGRAM _SC_PII_INTERNET_DGRAM
22073#define _SC_PII_OSI_COTS _SC_PII_OSI_COTS
22074#define _SC_PII_OSI_CLTS _SC_PII_OSI_CLTS
22075#define _SC_PII_OSI_M _SC_PII_OSI_M
22076#define _SC_T_IOV_MAX _SC_T_IOV_MAX
22077#define _SC_THREADS _SC_THREADS
22078#define _SC_THREAD_SAFE_FUNCTIONS _SC_THREAD_SAFE_FUNCTIONS
22079#define _SC_GETGR_R_SIZE_MAX _SC_GETGR_R_SIZE_MAX
22080#define _SC_GETPW_R_SIZE_MAX _SC_GETPW_R_SIZE_MAX
22081#define _SC_LOGIN_NAME_MAX _SC_LOGIN_NAME_MAX
22082#define _SC_TTY_NAME_MAX _SC_TTY_NAME_MAX
22083#define _SC_THREAD_DESTRUCTOR_ITERATIONS _SC_THREAD_DESTRUCTOR_ITERATIONS
22084#define _SC_THREAD_KEYS_MAX _SC_THREAD_KEYS_MAX
22085#define _SC_THREAD_STACK_MIN _SC_THREAD_STACK_MIN
22086#define _SC_THREAD_THREADS_MAX _SC_THREAD_THREADS_MAX
22087#define _SC_THREAD_ATTR_STACKADDR _SC_THREAD_ATTR_STACKADDR
22088#define _SC_THREAD_ATTR_STACKSIZE _SC_THREAD_ATTR_STACKSIZE
22089#define _SC_THREAD_PRIORITY_SCHEDULING _SC_THREAD_PRIORITY_SCHEDULING
22090#define _SC_THREAD_PRIO_INHERIT _SC_THREAD_PRIO_INHERIT
22091#define _SC_THREAD_PRIO_PROTECT _SC_THREAD_PRIO_PROTECT
22092#define _SC_THREAD_PROCESS_SHARED _SC_THREAD_PROCESS_SHARED
22093#define _SC_NPROCESSORS_CONF _SC_NPROCESSORS_CONF
22094#define _SC_NPROCESSORS_ONLN _SC_NPROCESSORS_ONLN
22095#define _SC_PHYS_PAGES _SC_PHYS_PAGES
22096#define _SC_AVPHYS_PAGES _SC_AVPHYS_PAGES
22097#define _SC_ATEXIT_MAX _SC_ATEXIT_MAX
22098#define _SC_PASS_MAX _SC_PASS_MAX
22099#define _SC_XOPEN_VERSION _SC_XOPEN_VERSION
22100#define _SC_XOPEN_XCU_VERSION _SC_XOPEN_XCU_VERSION
22101#define _SC_XOPEN_UNIX _SC_XOPEN_UNIX
22102#define _SC_XOPEN_CRYPT _SC_XOPEN_CRYPT
22103#define _SC_XOPEN_ENH_I18N _SC_XOPEN_ENH_I18N
22104#define _SC_XOPEN_SHM _SC_XOPEN_SHM
22105#define _SC_2_CHAR_TERM _SC_2_CHAR_TERM
22106#define _SC_2_C_VERSION _SC_2_C_VERSION
22107#define _SC_2_UPE _SC_2_UPE
22108#define _SC_XOPEN_XPG2 _SC_XOPEN_XPG2
22109#define _SC_XOPEN_XPG3 _SC_XOPEN_XPG3
22110#define _SC_XOPEN_XPG4 _SC_XOPEN_XPG4
22111#define _SC_CHAR_BIT _SC_CHAR_BIT
22112#define _SC_CHAR_MAX _SC_CHAR_MAX
22113#define _SC_CHAR_MIN _SC_CHAR_MIN
22114#define _SC_INT_MAX _SC_INT_MAX
22115#define _SC_INT_MIN _SC_INT_MIN
22116#define _SC_LONG_BIT _SC_LONG_BIT
22117#define _SC_WORD_BIT _SC_WORD_BIT
22118#define _SC_MB_LEN_MAX _SC_MB_LEN_MAX
22119#define _SC_NZERO _SC_NZERO
22120#define _SC_SSIZE_MAX _SC_SSIZE_MAX
22121#define _SC_SCHAR_MAX _SC_SCHAR_MAX
22122#define _SC_SCHAR_MIN _SC_SCHAR_MIN
22123#define _SC_SHRT_MAX _SC_SHRT_MAX
22124#define _SC_SHRT_MIN _SC_SHRT_MIN
22125#define _SC_UCHAR_MAX _SC_UCHAR_MAX
22126#define _SC_UINT_MAX _SC_UINT_MAX
22127#define _SC_ULONG_MAX _SC_ULONG_MAX
22128#define _SC_USHRT_MAX _SC_USHRT_MAX
22129#define _SC_NL_ARGMAX _SC_NL_ARGMAX
22130#define _SC_NL_LANGMAX _SC_NL_LANGMAX
22131#define _SC_NL_MSGMAX _SC_NL_MSGMAX
22132#define _SC_NL_NMAX _SC_NL_NMAX
22133#define _SC_NL_SETMAX _SC_NL_SETMAX
22134#define _SC_NL_TEXTMAX _SC_NL_TEXTMAX
22135#define _SC_XBS5_ILP32_OFF32 _SC_XBS5_ILP32_OFF32
22136#define _SC_XBS5_ILP32_OFFBIG _SC_XBS5_ILP32_OFFBIG
22137#define _SC_XBS5_LP64_OFF64 _SC_XBS5_LP64_OFF64
22138#define _SC_XBS5_LPBIG_OFFBIG _SC_XBS5_LPBIG_OFFBIG
22139#define _SC_XOPEN_LEGACY _SC_XOPEN_LEGACY
22140#define _SC_XOPEN_REALTIME _SC_XOPEN_REALTIME
22141#define _SC_XOPEN_REALTIME_THREADS _SC_XOPEN_REALTIME_THREADS
22142#define _SC_ADVISORY_INFO _SC_ADVISORY_INFO
22143#define _SC_BARRIERS _SC_BARRIERS
22144#define _SC_BASE _SC_BASE
22145#define _SC_C_LANG_SUPPORT _SC_C_LANG_SUPPORT
22146#define _SC_C_LANG_SUPPORT_R _SC_C_LANG_SUPPORT_R
22147#define _SC_CLOCK_SELECTION _SC_CLOCK_SELECTION
22148#define _SC_CPUTIME _SC_CPUTIME
22149#define _SC_THREAD_CPUTIME _SC_THREAD_CPUTIME
22150#define _SC_DEVICE_IO _SC_DEVICE_IO
22151#define _SC_DEVICE_SPECIFIC _SC_DEVICE_SPECIFIC
22152#define _SC_DEVICE_SPECIFIC_R _SC_DEVICE_SPECIFIC_R
22153#define _SC_FD_MGMT _SC_FD_MGMT
22154#define _SC_FIFO _SC_FIFO
22155#define _SC_PIPE _SC_PIPE
22156#define _SC_FILE_ATTRIBUTES _SC_FILE_ATTRIBUTES
22157#define _SC_FILE_LOCKING _SC_FILE_LOCKING
22158#define _SC_FILE_SYSTEM _SC_FILE_SYSTEM
22159#define _SC_MONOTONIC_CLOCK _SC_MONOTONIC_CLOCK
22160#define _SC_MULTI_PROCESS _SC_MULTI_PROCESS
22161#define _SC_SINGLE_PROCESS _SC_SINGLE_PROCESS
22162#define _SC_NETWORKING _SC_NETWORKING
22163#define _SC_READER_WRITER_LOCKS _SC_READER_WRITER_LOCKS
22164#define _SC_SPIN_LOCKS _SC_SPIN_LOCKS
22165#define _SC_REGEXP _SC_REGEXP
22166#define _SC_REGEX_VERSION _SC_REGEX_VERSION
22167#define _SC_SHELL _SC_SHELL
22168#define _SC_SIGNALS _SC_SIGNALS
22169#define _SC_SPAWN _SC_SPAWN
22170#define _SC_SPORADIC_SERVER _SC_SPORADIC_SERVER
22171#define _SC_THREAD_SPORADIC_SERVER _SC_THREAD_SPORADIC_SERVER
22172#define _SC_SYSTEM_DATABASE _SC_SYSTEM_DATABASE
22173#define _SC_SYSTEM_DATABASE_R _SC_SYSTEM_DATABASE_R
22174#define _SC_TIMEOUTS _SC_TIMEOUTS
22175#define _SC_TYPED_MEMORY_OBJECTS _SC_TYPED_MEMORY_OBJECTS
22176#define _SC_USER_GROUPS _SC_USER_GROUPS
22177#define _SC_USER_GROUPS_R _SC_USER_GROUPS_R
22178#define _SC_2_PBS _SC_2_PBS
22179#define _SC_2_PBS_ACCOUNTING _SC_2_PBS_ACCOUNTING
22180#define _SC_2_PBS_LOCATE _SC_2_PBS_LOCATE
22181#define _SC_2_PBS_MESSAGE _SC_2_PBS_MESSAGE
22182#define _SC_2_PBS_TRACK _SC_2_PBS_TRACK
22183#define _SC_SYMLOOP_MAX _SC_SYMLOOP_MAX
22184#define _SC_STREAMS _SC_STREAMS
22185#define _SC_2_PBS_CHECKPOINT _SC_2_PBS_CHECKPOINT
22186#define _SC_V6_ILP32_OFF32 _SC_V6_ILP32_OFF32
22187#define _SC_V6_ILP32_OFFBIG _SC_V6_ILP32_OFFBIG
22188#define _SC_V6_LP64_OFF64 _SC_V6_LP64_OFF64
22189#define _SC_V6_LPBIG_OFFBIG _SC_V6_LPBIG_OFFBIG
22190#define _SC_HOST_NAME_MAX _SC_HOST_NAME_MAX
22191#define _SC_TRACE _SC_TRACE
22192#define _SC_TRACE_EVENT_FILTER _SC_TRACE_EVENT_FILTER
22193#define _SC_TRACE_INHERIT _SC_TRACE_INHERIT
22194#define _SC_TRACE_LOG _SC_TRACE_LOG
22195#define _SC_LEVEL1_ICACHE_SIZE _SC_LEVEL1_ICACHE_SIZE
22196#define _SC_LEVEL1_ICACHE_ASSOC _SC_LEVEL1_ICACHE_ASSOC
22197#define _SC_LEVEL1_ICACHE_LINESIZE _SC_LEVEL1_ICACHE_LINESIZE
22198#define _SC_LEVEL1_DCACHE_SIZE _SC_LEVEL1_DCACHE_SIZE
22199#define _SC_LEVEL1_DCACHE_ASSOC _SC_LEVEL1_DCACHE_ASSOC
22200#define _SC_LEVEL1_DCACHE_LINESIZE _SC_LEVEL1_DCACHE_LINESIZE
22201#define _SC_LEVEL2_CACHE_SIZE _SC_LEVEL2_CACHE_SIZE
22202#define _SC_LEVEL2_CACHE_ASSOC _SC_LEVEL2_CACHE_ASSOC
22203#define _SC_LEVEL2_CACHE_LINESIZE _SC_LEVEL2_CACHE_LINESIZE
22204#define _SC_LEVEL3_CACHE_SIZE _SC_LEVEL3_CACHE_SIZE
22205#define _SC_LEVEL3_CACHE_ASSOC _SC_LEVEL3_CACHE_ASSOC
22206#define _SC_LEVEL3_CACHE_LINESIZE _SC_LEVEL3_CACHE_LINESIZE
22207#define _SC_LEVEL4_CACHE_SIZE _SC_LEVEL4_CACHE_SIZE
22208#define _SC_LEVEL4_CACHE_ASSOC _SC_LEVEL4_CACHE_ASSOC
22209#define _SC_LEVEL4_CACHE_LINESIZE _SC_LEVEL4_CACHE_LINESIZE
22210#define _SC_IPV6 _SC_IPV6
22211#define _SC_RAW_SOCKETS _SC_RAW_SOCKETS
22212#define _SC_V7_ILP32_OFF32 _SC_V7_ILP32_OFF32
22213#define _SC_V7_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
22214#define _SC_V7_LP64_OFF64 _SC_V7_LP64_OFF64
22215#define _SC_V7_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
22216#define _SC_SS_REPL_MAX _SC_SS_REPL_MAX
22217#define _SC_TRACE_EVENT_NAME_MAX _SC_TRACE_EVENT_NAME_MAX
22218#define _SC_TRACE_NAME_MAX _SC_TRACE_NAME_MAX
22219#define _SC_TRACE_SYS_MAX _SC_TRACE_SYS_MAX
22220#define _SC_TRACE_USER_EVENT_MAX _SC_TRACE_USER_EVENT_MAX
22221#define _SC_XOPEN_STREAMS _SC_XOPEN_STREAMS
22222#define _SC_THREAD_ROBUST_PRIO_INHERIT _SC_THREAD_ROBUST_PRIO_INHERIT
22223#define _SC_THREAD_ROBUST_PRIO_PROTECT _SC_THREAD_ROBUST_PRIO_PROTECT
22224#define _CS_PATH _CS_PATH
22225#define _CS_V6_WIDTH_RESTRICTED_ENVS _CS_V6_WIDTH_RESTRICTED_ENVS
22226#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_V6_WIDTH_RESTRICTED_ENVS
22227#define _CS_GNU_LIBC_VERSION _CS_GNU_LIBC_VERSION
22228#define _CS_GNU_LIBPTHREAD_VERSION _CS_GNU_LIBPTHREAD_VERSION
22229#define _CS_V5_WIDTH_RESTRICTED_ENVS _CS_V5_WIDTH_RESTRICTED_ENVS
22230#define _CS_POSIX_V5_WIDTH_RESTRICTED_ENVS _CS_V5_WIDTH_RESTRICTED_ENVS
22231#define _CS_V7_WIDTH_RESTRICTED_ENVS _CS_V7_WIDTH_RESTRICTED_ENVS
22232#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS _CS_V7_WIDTH_RESTRICTED_ENVS
22233#define _CS_LFS_CFLAGS _CS_LFS_CFLAGS
22234#define _CS_LFS_LDFLAGS _CS_LFS_LDFLAGS
22235#define _CS_LFS_LIBS _CS_LFS_LIBS
22236#define _CS_LFS_LINTFLAGS _CS_LFS_LINTFLAGS
22237#define _CS_LFS64_CFLAGS _CS_LFS64_CFLAGS
22238#define _CS_LFS64_LDFLAGS _CS_LFS64_LDFLAGS
22239#define _CS_LFS64_LIBS _CS_LFS64_LIBS
22240#define _CS_LFS64_LINTFLAGS _CS_LFS64_LINTFLAGS
22241#define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_XBS5_ILP32_OFF32_CFLAGS
22242#define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_XBS5_ILP32_OFF32_LDFLAGS
22243#define _CS_XBS5_ILP32_OFF32_LIBS _CS_XBS5_ILP32_OFF32_LIBS
22244#define _CS_XBS5_ILP32_OFF32_LINTFLAGS _CS_XBS5_ILP32_OFF32_LINTFLAGS
22245#define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_XBS5_ILP32_OFFBIG_CFLAGS
22246#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_XBS5_ILP32_OFFBIG_LDFLAGS
22247#define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_XBS5_ILP32_OFFBIG_LIBS
22248#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
22249#define _CS_XBS5_LP64_OFF64_CFLAGS _CS_XBS5_LP64_OFF64_CFLAGS
22250#define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_XBS5_LP64_OFF64_LDFLAGS
22251#define _CS_XBS5_LP64_OFF64_LIBS _CS_XBS5_LP64_OFF64_LIBS
22252#define _CS_XBS5_LP64_OFF64_LINTFLAGS _CS_XBS5_LP64_OFF64_LINTFLAGS
22253#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_XBS5_LPBIG_OFFBIG_CFLAGS
22254#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
22255#define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_XBS5_LPBIG_OFFBIG_LIBS
22256#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
22257#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V6_ILP32_OFF32_CFLAGS
22258#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
22259#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V6_ILP32_OFF32_LIBS
22260#define _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
22261#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
22262#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
22263#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V6_ILP32_OFFBIG_LIBS
22264#define _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS
22265#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V6_LP64_OFF64_CFLAGS
22266#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V6_LP64_OFF64_LDFLAGS
22267#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V6_LP64_OFF64_LIBS
22268#define _CS_POSIX_V6_LP64_OFF64_LINTFLAGS _CS_POSIX_V6_LP64_OFF64_LINTFLAGS
22269#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
22270#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
22271#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
22272#define _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
22273#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
22274#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
22275#define _CS_POSIX_V7_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
22276#define _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS
22277#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
22278#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
22279#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
22280#define _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS
22281#define _CS_POSIX_V7_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
22282#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
22283#define _CS_POSIX_V7_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
22284#define _CS_POSIX_V7_LP64_OFF64_LINTFLAGS _CS_POSIX_V7_LP64_OFF64_LINTFLAGS
22285#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
22286#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
22287#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
22288#define _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS
22289#define _CS_V6_ENV _CS_V6_ENV
22290#define _CS_V7_ENV _CS_V7_ENV
22291#define _GETOPT_POSIX_H 1
22292#define _GETOPT_CORE_H 1
22293#define F_ULOCK 0
22294#define F_LOCK 1
22295#define F_TLOCK 2
22296#define F_TEST 3
22297#define TEMP_FAILURE_RETRY(expression) (__extension__ ({ long int __result; do __result = (long int) (expression); while (__result == -1L && errno == EINTR); __result; }))
22298#define RBIMPL_DLLEXPORT_H
22299#undef RUBY_EXTERN
22300#define RUBY_EXTERN extern
22301#define MJIT_FUNC_EXPORTED RUBY_FUNC_EXPORTED
22302#define MJIT_SYMBOL_EXPORT_BEGIN RUBY_SYMBOL_EXPORT_BEGIN
22303#define MJIT_SYMBOL_EXPORT_END RUBY_SYMBOL_EXPORT_END
22304#define MJIT_STATIC static
22305#define RBIMPL_SYMBOL_EXPORT_BEGIN() RUBY_SYMBOL_EXPORT_BEGIN
22306#define RBIMPL_SYMBOL_EXPORT_END() RUBY_SYMBOL_EXPORT_END
22307#define RBIMPL_XMALLOC_H
22308#define RBIMPL_ATTR_ALLOC_SIZE_H
22309#define RBIMPL_HAS_ATTRIBUTE_H
22310#define RBIMPL_HAVE___HAS_ATTRIBUTE 1
22311#define RBIMPL_HAS_ATTRIBUTE(_) __has_attribute(_)
22312#define RBIMPL_ATTR_ALLOC_SIZE(tuple) __attribute__((__alloc_size__ tuple))
22313#define RBIMPL_ATTR_NODISCARD_H
22314#define RBIMPL_HAS_C_ATTRIBUTE_H
22315#define RBIMPL_HAS_C_ATTRIBUTE(_) __has_c_attribute(_)
22316#define RBIMPL_HAS_CPP_ATTRIBUTE_H
22317#define RBIMPL_HAS_CPP_ATTRIBUTE0(_) __has_cpp_attribute(_)
22318#define RBIMPL_HAS_CPP_ATTRIBUTE(_) 0
22319#define RBIMPL_ATTR_NODISCARD() [[nodiscard]]
22320#define RBIMPL_ATTR_NOEXCEPT_H
22321#define RBIMPL_HAS_FEATURE_H
22322#define RBIMPL_HAS_FEATURE(_) 0
22323#define RBIMPL_ATTR_NOEXCEPT(_)
22324#define RBIMPL_ATTR_RESTRICT_H
22325#define RBIMPL_ATTR_RESTRICT() __attribute__((__malloc__))
22326#define RBIMPL_ATTR_RETURNS_NONNULL_H
22327#define RBIMPL_ATTR_RETURNS_NONNULL() __attribute__((__returns_nonnull__))
22328#define USE_GC_MALLOC_OBJ_INFO_DETAILS 0
22329#define xmalloc ruby_xmalloc
22330#define xmalloc2 ruby_xmalloc2
22331#define xcalloc ruby_xcalloc
22332#define xrealloc ruby_xrealloc
22333#define xrealloc2 ruby_xrealloc2
22334#define xfree ruby_xfree
22335#pragma GCC visibility push(default)
22336#pragma GCC visibility pop
22337#define RUBY_BACKWARD2_ASSUME_H
22338#define RBIMPL_ASSUME_H
22339#define RBIMPL_CAST_H
22340#define RBIMPL_HAS_WARNING_H
22341#define RBIMPL_HAS_WARNING(_) 0
22342#define RBIMPL_WARNING_PUSH_H
22343#define RBIMPL_WARNING_PRAGMA0(x) _Pragma(#x)
22344#define RBIMPL_WARNING_PRAGMA1(x) RBIMPL_WARNING_PRAGMA0(GCC diagnostic x)
22345#define RBIMPL_WARNING_PRAGMA2(x,y) RBIMPL_WARNING_PRAGMA1(x #y)
22346#define RBIMPL_WARNING_PUSH() RBIMPL_WARNING_PRAGMA1(push)
22347#define RBIMPL_WARNING_POP() RBIMPL_WARNING_PRAGMA1(pop)
22348#define RBIMPL_WARNING_ERROR(flag) RBIMPL_WARNING_PRAGMA2(error, flag)
22349#define RBIMPL_WARNING_IGNORED(flag) RBIMPL_WARNING_PRAGMA2(ignored, flag)
22350#define RBIMPL_CAST(expr) (expr)
22351#define RBIMPL_HAS_BUILTIN_H
22352#define RBIMPL_HAVE___HAS_BUILTIN 1
22353#define RBIMPL_HAS_BUILTIN(_) __has_builtin(_)
22354#define RBIMPL_UNREACHABLE_RETURN(_) __builtin_unreachable()
22355#define RBIMPL_UNREACHABLE __builtin_unreachable
22356#define RBIMPL_ASSUME(_) (RB_LIKELY(!!(_)) ? RBIMPL_CAST((void)0) : RBIMPL_UNREACHABLE())
22357#undef ASSUME
22358#undef UNREACHABLE
22359#define ASSUME RBIMPL_ASSUME
22360#define UNREACHABLE RBIMPL_UNREACHABLE()
22361#define UNREACHABLE_RETURN RBIMPL_UNREACHABLE_RETURN
22362#define RB_LIKELY(x) (__builtin_expect(!!(x), 1))
22363#define RB_UNLIKELY(x) (__builtin_expect(!!(x), 0))
22364#define RUBY_BACKWARD2_ATTRIBUTES_H
22365#define RBIMPL_ATTR_CONST_H
22366#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_H
22367#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE(_) (RBIMPL_HAS_DECLSPEC_ATTRIBUTE_ ## _)
22368#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_align RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
22369#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_deprecated RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
22370#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllexport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
22371#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllimport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
22372#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_empty_bases RBIMPL_COMPILER_SINCE(MSVC,19, 0, 23918)
22373#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noalias RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
22374#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noinline RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
22375#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noreturn RBIMPL_COMPILER_SINCE(MSVC,11, 0, 0)
22376#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
22377#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_restrict RBIMPL_COMPILER_SINCE(MSVC,14, 0, 0)
22378#undef RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow
22379#define RBIMPL_ATTR_CONST() __attribute__((__const__))
22380#define RBIMPL_ATTR_CONST_UNLESS_DEBUG() RBIMPL_ATTR_CONST()
22381#define RBIMPL_ATTR_DEPRECATED_H
22382#define RBIMPL_HAS_EXTENSION_H
22383#define RBIMPL_HAS_EXTENSION(_) RBIMPL_HAS_FEATURE(_)
22384#define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg))
22385#define RBIMPL_ATTR_DEPRECATED_EXT(msg)
22386#define RBIMPL_ATTR_ERROR_H
22387#define RBIMPL_ATTR_ERROR(msg) __attribute__((__error__ msg))
22388#define RBIMPL_ATTR_FORCEINLINE_H
22389#define RBIMPL_ATTR_FORCEINLINE() __attribute__((__always_inline__)) inline
22390#define RBIMPL_ATTR_FORMAT_H
22391#define RBIMPL_ATTR_FORMAT(x,y,z) __attribute__((__format__(x, y, z)))
22392#define RBIMPL_PRINTF_FORMAT __printf__
22393#define RBIMPL_ATTR_MAYBE_UNUSED_H
22394#define RBIMPL_ATTR_MAYBE_UNUSED() [[maybe_unused]]
22395#define RBIMPL_ATTR_NOINLINE_H
22396#define RBIMPL_ATTR_NOINLINE() __attribute__((__noinline__))
22397#define RBIMPL_ATTR_NONNULL_H
22398#define RBIMPL_ATTR_NONNULL(list) __attribute__((__nonnull__ list))
22399#define RBIMPL_NONNULL_ARG(arg) RBIMPL_ASSERT_NOTHING
22400#define RBIMPL_ATTR_NORETURN_H
22401#define RBIMPL_ATTR_NORETURN() __attribute__((__noreturn__))
22402#define RBIMPL_ATTR_PURE_H
22403#define RUBY_ASSERT_H
22404#define RBIMPL_RUBY_DEBUG 0
22405#define RBIMPL_NDEBUG 0
22406#undef RUBY_DEBUG
22407#undef RUBY_NDEBUG
22408#undef NDEBUG
22409#define RUBY_DEBUG 0
22410#define RUBY_NDEBUG 1
22411#define NDEBUG
22412#undef RBIMPL_NDEBUG
22413#undef RBIMPL_RUBY_DEBUG
22414#define RBIMPL_ASSERT_NOTHING RBIMPL_CAST((void)0)
22415#pragma GCC visibility push(default)
22416#pragma GCC visibility pop
22417#define RBIMPL_ASSERT_FUNC RUBY_FUNCTION_NAME_STRING
22418#define RUBY_ASSERT_FAIL(mesg) rb_assert_failure(__FILE__, __LINE__, RBIMPL_ASSERT_FUNC, mesg)
22419#define RUBY_ASSERT_MESG(expr,mesg) (RB_LIKELY(expr) ? RBIMPL_ASSERT_NOTHING : RUBY_ASSERT_FAIL(mesg))
22420#define RUBY_ASSERT_ALWAYS(expr) RUBY_ASSERT_MESG((expr), #expr)
22421#define RUBY_ASSERT(expr) RBIMPL_ASSERT_NOTHING
22422#define RUBY_ASSERT_NDEBUG(expr) RBIMPL_ASSERT_NOTHING
22423#define RUBY_ASSERT_MESG_WHEN(cond,expr,mesg) ((cond) ? RUBY_ASSERT_MESG((expr), (mesg)) : RBIMPL_ASSERT_NOTHING)
22424#define RUBY_ASSERT_WHEN(cond,expr) RUBY_ASSERT_MESG_WHEN((cond), (expr), #expr)
22425#define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSERT_NOTHING
22426#define RBIMPL_ATTR_PURE() __attribute__((__pure__))
22427#define RBIMPL_ATTR_PURE_UNLESS_DEBUG() RBIMPL_ATTR_PURE()
22428#define RBIMPL_ATTR_WARNING_H
22429#define RBIMPL_ATTR_WARNING(msg) __attribute__((__warning__ msg))
22430#undef CONSTFUNC
22431#define CONSTFUNC(x) RBIMPL_ATTR_CONST() x
22432#undef PUREFUNC
22433#define PUREFUNC(x) RBIMPL_ATTR_PURE() x
22434#undef DEPRECATED
22435#define DEPRECATED(x) RBIMPL_ATTR_DEPRECATED(("")) x
22436#undef DEPRECATED_BY
22437#define DEPRECATED_BY(n,x) RBIMPL_ATTR_DEPRECATED(("by: " #n)) x
22438#undef DEPRECATED_TYPE
22439#define DEPRECATED_TYPE(mesg,decl) _Pragma("message \"DEPRECATED_TYPE is deprecated\""); decl RBIMPL_ATTR_DEPRECATED(mseg)
22440#undef RUBY_CXX_DEPRECATED
22441#define RUBY_CXX_DEPRECATED(mseg) RBIMPL_ATTR_DEPRECATED((mseg))
22442#undef NOINLINE
22443#define NOINLINE(x) RBIMPL_ATTR_NOINLINE() x
22444#undef ERRORFUNC
22445#define ERRORFUNC(mesg,x) RBIMPL_ATTR_ERROR(mesg) x
22446#define HAVE_ATTRIBUTE_ERRORFUNC 1
22447#undef WARNINGFUNC
22448#define WARNINGFUNC(mesg,x) RBIMPL_ATTR_WARNING(mesg) x
22449#define HAVE_ATTRIBUTE_WARNINGFUNC 1
22450#undef COLDFUNC
22451#define PRINTF_ARGS(decl,string_index,first_to_check) RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, (string_index), (first_to_check)) decl
22452#undef RUBY_ATTR_ALLOC_SIZE
22453#define RUBY_ATTR_ALLOC_SIZE RBIMPL_ATTR_ALLOC_SIZE
22454#undef RUBY_ATTR_MALLOC
22455#define RUBY_ATTR_MALLOC RBIMPL_ATTR_RESTRICT()
22456#undef RUBY_ATTR_RETURNS_NONNULL
22457#define RUBY_ATTR_RETURNS_NONNULL RBIMPL_ATTR_RETURNS_NONNULL()
22458#define RUBY_ALIAS_FUNCTION(prot,name,args) RUBY_ALIAS_FUNCTION_TYPE(VALUE, prot, name, args)
22459#undef RUBY_FUNC_NONNULL
22460#define RUBY_FUNC_NONNULL(n,x) RBIMPL_ATTR_NONNULL(n) x
22461#undef NORETURN
22462#define NORETURN(x) RBIMPL_ATTR_NORETURN() x
22463#define NORETURN_STYLE_NEW
22464#define PACKED_STRUCT_UNALIGNED(x) PACKED_STRUCT(x)
22465#undef RB_UNUSED_VAR
22466#define RB_UNUSED_VAR(x) x RBIMPL_ATTR_MAYBE_UNUSED()
22467#define RUBY_BACKWARD2_BOOL_H
22468#define RBIMPL_STDBOOL_H
22469#define _STDBOOL_H
22470#define bool _Bool
22471#define true 1
22472#define false 0
22473#define __bool_true_false_are_defined 1
22474#define FALSE false
22475#define TRUE true
22476#define RUBY_BACKWARD2_LONG_LONG_H
22477#define HAVE_TRUE_LONG_LONG 1
22478#define LONG_LONG long long
22479#define RUBY_BACKWARD2_STDALIGN_H
22480#define RBIMPL_STDALIGN_H
22481#define RBIMPL_ALIGNAS(_) __attribute__((__aligned__(_)))
22482#define RBIMPL_ALIGNOF(T) RB_GNUC_EXTENSION(_Alignof(T))
22483#undef RUBY_ALIGNAS
22484#undef RUBY_ALIGNOF
22485#define RUBY_ALIGNAS RBIMPL_ALIGNAS
22486#define RUBY_ALIGNOF RBIMPL_ALIGNOF
22487#define RUBY_BACKWARD2_STDARG_H
22488#undef _
22489#define _(args) args
22490#undef __
22491#define __(args) args
22492#define ANYARGS
22493#define RBIMPL_DOSISH_H
22494#define PATH_SEP ":"
22495#define PATH_SEP_CHAR PATH_SEP[0]
22496#define PATH_ENV "PATH"
22497#define CASEFOLD_FILESYSTEM 0
22498#define RUBY_MISSING_H 1
22499#define _MATH_H 1
22500#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
22501#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
22502#undef __GLIBC_USE_LIB_EXT2
22503#define __GLIBC_USE_LIB_EXT2 1
22504#undef __GLIBC_USE_IEC_60559_BFP_EXT
22505#define __GLIBC_USE_IEC_60559_BFP_EXT 1
22506#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X
22507#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1
22508#undef __GLIBC_USE_IEC_60559_FUNCS_EXT
22509#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1
22510#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X
22511#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1
22512#undef __GLIBC_USE_IEC_60559_TYPES_EXT
22513#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
22514#define _BITS_LIBM_SIMD_DECL_STUBS_H 1
22515#define __DECL_SIMD_cos
22516#define __DECL_SIMD_cosf
22517#define __DECL_SIMD_cosl
22518#define __DECL_SIMD_cosf16
22519#define __DECL_SIMD_cosf32
22520#define __DECL_SIMD_cosf64
22521#define __DECL_SIMD_cosf128
22522#define __DECL_SIMD_cosf32x
22523#define __DECL_SIMD_cosf64x
22524#define __DECL_SIMD_cosf128x
22525#define __DECL_SIMD_sin
22526#define __DECL_SIMD_sinf
22527#define __DECL_SIMD_sinl
22528#define __DECL_SIMD_sinf16
22529#define __DECL_SIMD_sinf32
22530#define __DECL_SIMD_sinf64
22531#define __DECL_SIMD_sinf128
22532#define __DECL_SIMD_sinf32x
22533#define __DECL_SIMD_sinf64x
22534#define __DECL_SIMD_sinf128x
22535#define __DECL_SIMD_sincos
22536#define __DECL_SIMD_sincosf
22537#define __DECL_SIMD_sincosl
22538#define __DECL_SIMD_sincosf16
22539#define __DECL_SIMD_sincosf32
22540#define __DECL_SIMD_sincosf64
22541#define __DECL_SIMD_sincosf128
22542#define __DECL_SIMD_sincosf32x
22543#define __DECL_SIMD_sincosf64x
22544#define __DECL_SIMD_sincosf128x
22545#define __DECL_SIMD_log
22546#define __DECL_SIMD_logf
22547#define __DECL_SIMD_logl
22548#define __DECL_SIMD_logf16
22549#define __DECL_SIMD_logf32
22550#define __DECL_SIMD_logf64
22551#define __DECL_SIMD_logf128
22552#define __DECL_SIMD_logf32x
22553#define __DECL_SIMD_logf64x
22554#define __DECL_SIMD_logf128x
22555#define __DECL_SIMD_exp
22556#define __DECL_SIMD_expf
22557#define __DECL_SIMD_expl
22558#define __DECL_SIMD_expf16
22559#define __DECL_SIMD_expf32
22560#define __DECL_SIMD_expf64
22561#define __DECL_SIMD_expf128
22562#define __DECL_SIMD_expf32x
22563#define __DECL_SIMD_expf64x
22564#define __DECL_SIMD_expf128x
22565#define __DECL_SIMD_pow
22566#define __DECL_SIMD_powf
22567#define __DECL_SIMD_powl
22568#define __DECL_SIMD_powf16
22569#define __DECL_SIMD_powf32
22570#define __DECL_SIMD_powf64
22571#define __DECL_SIMD_powf128
22572#define __DECL_SIMD_powf32x
22573#define __DECL_SIMD_powf64x
22574#define __DECL_SIMD_powf128x
22575#define HUGE_VAL (__builtin_huge_val ())
22576#define HUGE_VALF (__builtin_huge_valf ())
22577#define HUGE_VALL (__builtin_huge_vall ())
22578#define HUGE_VAL_F32 (__builtin_huge_valf32 ())
22579#define HUGE_VAL_F64 (__builtin_huge_valf64 ())
22580#define HUGE_VAL_F128 (__builtin_huge_valf128 ())
22581#define HUGE_VAL_F32X (__builtin_huge_valf32x ())
22582#define HUGE_VAL_F64X (__builtin_huge_valf64x ())
22583#define INFINITY (__builtin_inff ())
22584#define NAN (__builtin_nanf (""))
22585#define SNANF (__builtin_nansf (""))
22586#define SNAN (__builtin_nans (""))
22587#define SNANL (__builtin_nansl (""))
22588#define SNANF32 (__builtin_nansf32 (""))
22589#define SNANF64 (__builtin_nansf64 (""))
22590#define SNANF128 (__builtin_nansf128 (""))
22591#define SNANF32X (__builtin_nansf32x (""))
22592#define SNANF64X (__builtin_nansf64x (""))
22593#define __GLIBC_FLT_EVAL_METHOD __FLT_EVAL_METHOD__
22594#define __FP_LOGB0_IS_MIN 1
22595#define __FP_LOGBNAN_IS_MIN 1
22596#define FP_ILOGB0 (-2147483647 - 1)
22597#define FP_ILOGBNAN (-2147483647 - 1)
22598#define __FP_LONG_MAX 0x7fffffffffffffffL
22599#define FP_LLOGB0 (-__FP_LONG_MAX - 1)
22600#define FP_LLOGBNAN (-__FP_LONG_MAX - 1)
22601#define FP_INT_UPWARD 0
22602#define FP_INT_DOWNWARD 1
22603#define FP_INT_TOWARDZERO 2
22604#define FP_INT_TONEARESTFROMZERO 3
22605#define FP_INT_TONEAREST 4
22606#define __SIMD_DECL(function) __CONCAT (__DECL_SIMD_, function)
22607#define __MATHCALL_VEC(function,suffix,args) __SIMD_DECL (__MATH_PRECNAME (function, suffix)) __MATHCALL (function, suffix, args)
22608#define __MATHDECL_VEC(type,function,suffix,args) __SIMD_DECL (__MATH_PRECNAME (function, suffix)) __MATHDECL(type, function,suffix, args)
22609#define __MATHCALL(function,suffix,args) __MATHDECL (_Mdouble_,function,suffix, args)
22610#define __MATHDECL(type,function,suffix,args) __MATHDECL_1(type, function,suffix, args); __MATHDECL_1(type, __CONCAT(__,function),suffix, args)
22611#define __MATHCALLX(function,suffix,args,attrib) __MATHDECLX (_Mdouble_,function,suffix, args, attrib)
22612#define __MATHDECLX(type,function,suffix,args,attrib) __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib)
22613#define __MATHDECL_1_IMPL(type,function,suffix,args) extern type __MATH_PRECNAME(function,suffix) args __THROW
22614#define __MATHDECL_1(type,function,suffix,args) __MATHDECL_1_IMPL(type, function, suffix, args)
22615#define __MATHDECL_ALIAS(type,function,suffix,args,alias) __MATHDECL_1(type, function, suffix, args)
22616#define __MATHREDIR(type,function,suffix,args,to) extern type __REDIRECT_NTH (__MATH_PRECNAME (function, suffix), args, to)
22617#define _Mdouble_ double
22618#define __MATH_PRECNAME(name,r) __CONCAT(name,r)
22619#define __MATH_DECLARING_DOUBLE 1
22620#define __MATH_DECLARING_FLOATN 0
22621#undef _Mdouble_
22622#undef __MATH_PRECNAME
22623#undef __MATH_DECLARING_DOUBLE
22624#undef __MATH_DECLARING_FLOATN
22625#define _Mdouble_ float
22626#define __MATH_PRECNAME(name,r) name ##f ##r
22627#define __MATH_DECLARING_DOUBLE 0
22628#define __MATH_DECLARING_FLOATN 0
22629#undef _Mdouble_
22630#undef __MATH_PRECNAME
22631#undef __MATH_DECLARING_DOUBLE
22632#undef __MATH_DECLARING_FLOATN
22633#define _Mdouble_ long double
22634#define __MATH_PRECNAME(name,r) name ##l ##r
22635#define __MATH_DECLARING_DOUBLE 0
22636#define __MATH_DECLARING_FLOATN 0
22637#define __MATH_DECLARE_LDOUBLE 1
22638#undef _Mdouble_
22639#undef __MATH_PRECNAME
22640#undef __MATH_DECLARING_DOUBLE
22641#undef __MATH_DECLARING_FLOATN
22642#define _Mdouble_ _Float32
22643#define __MATH_PRECNAME(name,r) name ##f32 ##r
22644#define __MATH_DECLARING_DOUBLE 0
22645#define __MATH_DECLARING_FLOATN 1
22646#undef _Mdouble_
22647#undef __MATH_PRECNAME
22648#undef __MATH_DECLARING_DOUBLE
22649#undef __MATH_DECLARING_FLOATN
22650#define _Mdouble_ _Float64
22651#define __MATH_PRECNAME(name,r) name ##f64 ##r
22652#define __MATH_DECLARING_DOUBLE 0
22653#define __MATH_DECLARING_FLOATN 1
22654#undef _Mdouble_
22655#undef __MATH_PRECNAME
22656#undef __MATH_DECLARING_DOUBLE
22657#undef __MATH_DECLARING_FLOATN
22658#define _Mdouble_ _Float128
22659#define __MATH_PRECNAME(name,r) name ##f128 ##r
22660#define __MATH_DECLARING_DOUBLE 0
22661#define __MATH_DECLARING_FLOATN 1
22662#undef _Mdouble_
22663#undef __MATH_PRECNAME
22664#undef __MATH_DECLARING_DOUBLE
22665#undef __MATH_DECLARING_FLOATN
22666#define _Mdouble_ _Float32x
22667#define __MATH_PRECNAME(name,r) name ##f32x ##r
22668#define __MATH_DECLARING_DOUBLE 0
22669#define __MATH_DECLARING_FLOATN 1
22670#undef _Mdouble_
22671#undef __MATH_PRECNAME
22672#undef __MATH_DECLARING_DOUBLE
22673#undef __MATH_DECLARING_FLOATN
22674#define _Mdouble_ _Float64x
22675#define __MATH_PRECNAME(name,r) name ##f64x ##r
22676#define __MATH_DECLARING_DOUBLE 0
22677#define __MATH_DECLARING_FLOATN 1
22678#undef _Mdouble_
22679#undef __MATH_PRECNAME
22680#undef __MATH_DECLARING_DOUBLE
22681#undef __MATH_DECLARING_FLOATN
22682#undef __MATHDECL_1_IMPL
22683#undef __MATHDECL_1
22684#undef __MATHDECL_ALIAS
22685#undef __MATHDECL
22686#undef __MATHCALL
22687#define __MATHCALL_NARROW_ARGS_1 (_Marg_ __x)
22688#define __MATHCALL_NARROW_ARGS_2 (_Marg_ __x, _Marg_ __y)
22689#define __MATHCALL_NARROW_ARGS_3 (_Marg_ __x, _Marg_ __y, _Marg_ __z)
22690#define __MATHCALL_NARROW_NORMAL(func,nargs) extern _Mret_ func __MATHCALL_NARROW_ARGS_ ## nargs __THROW
22691#define __MATHCALL_NARROW_REDIR(func,redir,nargs) extern _Mret_ __REDIRECT_NTH (func, __MATHCALL_NARROW_ARGS_ ## nargs, redir)
22692#define __MATHCALL_NARROW(func,redir,nargs) __MATHCALL_NARROW_NORMAL (func, nargs)
22693#define _Mret_ float
22694#define _Marg_ double
22695#define __MATHCALL_NAME(name) f ## name
22696#undef _Mret_
22697#undef _Marg_
22698#undef __MATHCALL_NAME
22699#define _Mret_ float
22700#define _Marg_ long double
22701#define __MATHCALL_NAME(name) f ## name ## l
22702#undef _Mret_
22703#undef _Marg_
22704#undef __MATHCALL_NAME
22705#define _Mret_ double
22706#define _Marg_ long double
22707#define __MATHCALL_NAME(name) d ## name ## l
22708#undef _Mret_
22709#undef _Marg_
22710#undef __MATHCALL_NAME
22711#define _Mret_ _Float32
22712#define _Marg_ _Float32x
22713#define __MATHCALL_NAME(name) f32 ## name ## f32x
22714#undef _Mret_
22715#undef _Marg_
22716#undef __MATHCALL_NAME
22717#define _Mret_ _Float32
22718#define _Marg_ _Float64
22719#define __MATHCALL_NAME(name) f32 ## name ## f64
22720#undef _Mret_
22721#undef _Marg_
22722#undef __MATHCALL_NAME
22723#define _Mret_ _Float32
22724#define _Marg_ _Float64x
22725#define __MATHCALL_NAME(name) f32 ## name ## f64x
22726#undef _Mret_
22727#undef _Marg_
22728#undef __MATHCALL_NAME
22729#define _Mret_ _Float32
22730#define _Marg_ _Float128
22731#define __MATHCALL_NAME(name) f32 ## name ## f128
22732#undef _Mret_
22733#undef _Marg_
22734#undef __MATHCALL_NAME
22735#define _Mret_ _Float32x
22736#define _Marg_ _Float64
22737#define __MATHCALL_NAME(name) f32x ## name ## f64
22738#undef _Mret_
22739#undef _Marg_
22740#undef __MATHCALL_NAME
22741#define _Mret_ _Float32x
22742#define _Marg_ _Float64x
22743#define __MATHCALL_NAME(name) f32x ## name ## f64x
22744#undef _Mret_
22745#undef _Marg_
22746#undef __MATHCALL_NAME
22747#define _Mret_ _Float32x
22748#define _Marg_ _Float128
22749#define __MATHCALL_NAME(name) f32x ## name ## f128
22750#undef _Mret_
22751#undef _Marg_
22752#undef __MATHCALL_NAME
22753#define _Mret_ _Float64
22754#define _Marg_ _Float64x
22755#define __MATHCALL_NAME(name) f64 ## name ## f64x
22756#undef _Mret_
22757#undef _Marg_
22758#undef __MATHCALL_NAME
22759#define _Mret_ _Float64
22760#define _Marg_ _Float128
22761#define __MATHCALL_NAME(name) f64 ## name ## f128
22762#undef _Mret_
22763#undef _Marg_
22764#undef __MATHCALL_NAME
22765#define _Mret_ _Float64x
22766#define _Marg_ _Float128
22767#define __MATHCALL_NAME(name) f64x ## name ## f128
22768#undef _Mret_
22769#undef _Marg_
22770#undef __MATHCALL_NAME
22771#undef __MATHCALL_NARROW_ARGS_1
22772#undef __MATHCALL_NARROW_ARGS_2
22773#undef __MATHCALL_NARROW_ARGS_3
22774#undef __MATHCALL_NARROW_NORMAL
22775#undef __MATHCALL_NARROW_REDIR
22776#undef __MATHCALL_NARROW
22777#define __MATH_TG_F32(FUNC,ARGS) _Float32: FUNC ## f ARGS,
22778#define __MATH_TG_F64X(FUNC,ARGS) _Float64x: FUNC ## l ARGS,
22779#define __MATH_TG(TG_ARG,FUNC,ARGS) _Generic ((TG_ARG), float: FUNC ## f ARGS, __MATH_TG_F32 (FUNC, ARGS) default: FUNC ARGS, long double: FUNC ## l ARGS, __MATH_TG_F64X (FUNC, ARGS) _Float128: FUNC ## f128 ARGS)
22780#define FP_NAN 0
22781#define FP_INFINITE 1
22782#define FP_ZERO 2
22783#define FP_SUBNORMAL 3
22784#define FP_NORMAL 4
22785#define fpclassify(x) __builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, x)
22786#define signbit(x) __builtin_signbit (x)
22787#define isfinite(x) __builtin_isfinite (x)
22788#define isnormal(x) __builtin_isnormal (x)
22789#define isnan(x) __builtin_isnan (x)
22790#define isinf(x) __builtin_isinf_sign (x)
22791#define MATH_ERRNO 1
22792#define MATH_ERREXCEPT 2
22793#define math_errhandling (MATH_ERRNO | MATH_ERREXCEPT)
22794#define __iscanonicalf(x) ((void) (__typeof (x)) (x), 1)
22795#define __iscanonical(x) ((void) (__typeof (x)) (x), 1)
22796#define __iscanonicalf128(x) ((void) (__typeof (x)) (x), 1)
22797#define iscanonical(x) __MATH_TG ((x), __iscanonical, (x))
22798#define issignaling(x) __MATH_TG ((x), __issignaling, (x))
22799#define issubnormal(x) (fpclassify (x) == FP_SUBNORMAL)
22800#define iszero(x) (((__typeof (x)) (x)) == 0)
22801#define MAXFLOAT 3.40282347e+38F
22802#define M_E 2.7182818284590452354
22803#define M_LOG2E 1.4426950408889634074
22804#define M_LOG10E 0.43429448190325182765
22805#define M_LN2 0.69314718055994530942
22806#define M_LN10 2.30258509299404568402
22807#define M_PI 3.14159265358979323846
22808#define M_PI_2 1.57079632679489661923
22809#define M_PI_4 0.78539816339744830962
22810#define M_1_PI 0.31830988618379067154
22811#define M_2_PI 0.63661977236758134308
22812#define M_2_SQRTPI 1.12837916709551257390
22813#define M_SQRT2 1.41421356237309504880
22814#define M_SQRT1_2 0.70710678118654752440
22815#define M_El 2.718281828459045235360287471352662498L
22816#define M_LOG2El 1.442695040888963407359924681001892137L
22817#define M_LOG10El 0.434294481903251827651128918916605082L
22818#define M_LN2l 0.693147180559945309417232121458176568L
22819#define M_LN10l 2.302585092994045684017991454684364208L
22820#define M_PIl 3.141592653589793238462643383279502884L
22821#define M_PI_2l 1.570796326794896619231321691639751442L
22822#define M_PI_4l 0.785398163397448309615660845819875721L
22823#define M_1_PIl 0.318309886183790671537767526745028724L
22824#define M_2_PIl 0.636619772367581343075535053490057448L
22825#define M_2_SQRTPIl 1.128379167095512573896158903121545172L
22826#define M_SQRT2l 1.414213562373095048801688724209698079L
22827#define M_SQRT1_2l 0.707106781186547524400844362104849039L
22828#define M_Ef32 __f32 (2.718281828459045235360287471352662498)
22829#define M_LOG2Ef32 __f32 (1.442695040888963407359924681001892137)
22830#define M_LOG10Ef32 __f32 (0.434294481903251827651128918916605082)
22831#define M_LN2f32 __f32 (0.693147180559945309417232121458176568)
22832#define M_LN10f32 __f32 (2.302585092994045684017991454684364208)
22833#define M_PIf32 __f32 (3.141592653589793238462643383279502884)
22834#define M_PI_2f32 __f32 (1.570796326794896619231321691639751442)
22835#define M_PI_4f32 __f32 (0.785398163397448309615660845819875721)
22836#define M_1_PIf32 __f32 (0.318309886183790671537767526745028724)
22837#define M_2_PIf32 __f32 (0.636619772367581343075535053490057448)
22838#define M_2_SQRTPIf32 __f32 (1.128379167095512573896158903121545172)
22839#define M_SQRT2f32 __f32 (1.414213562373095048801688724209698079)
22840#define M_SQRT1_2f32 __f32 (0.707106781186547524400844362104849039)
22841#define M_Ef64 __f64 (2.718281828459045235360287471352662498)
22842#define M_LOG2Ef64 __f64 (1.442695040888963407359924681001892137)
22843#define M_LOG10Ef64 __f64 (0.434294481903251827651128918916605082)
22844#define M_LN2f64 __f64 (0.693147180559945309417232121458176568)
22845#define M_LN10f64 __f64 (2.302585092994045684017991454684364208)
22846#define M_PIf64 __f64 (3.141592653589793238462643383279502884)
22847#define M_PI_2f64 __f64 (1.570796326794896619231321691639751442)
22848#define M_PI_4f64 __f64 (0.785398163397448309615660845819875721)
22849#define M_1_PIf64 __f64 (0.318309886183790671537767526745028724)
22850#define M_2_PIf64 __f64 (0.636619772367581343075535053490057448)
22851#define M_2_SQRTPIf64 __f64 (1.128379167095512573896158903121545172)
22852#define M_SQRT2f64 __f64 (1.414213562373095048801688724209698079)
22853#define M_SQRT1_2f64 __f64 (0.707106781186547524400844362104849039)
22854#define M_Ef128 __f128 (2.718281828459045235360287471352662498)
22855#define M_LOG2Ef128 __f128 (1.442695040888963407359924681001892137)
22856#define M_LOG10Ef128 __f128 (0.434294481903251827651128918916605082)
22857#define M_LN2f128 __f128 (0.693147180559945309417232121458176568)
22858#define M_LN10f128 __f128 (2.302585092994045684017991454684364208)
22859#define M_PIf128 __f128 (3.141592653589793238462643383279502884)
22860#define M_PI_2f128 __f128 (1.570796326794896619231321691639751442)
22861#define M_PI_4f128 __f128 (0.785398163397448309615660845819875721)
22862#define M_1_PIf128 __f128 (0.318309886183790671537767526745028724)
22863#define M_2_PIf128 __f128 (0.636619772367581343075535053490057448)
22864#define M_2_SQRTPIf128 __f128 (1.128379167095512573896158903121545172)
22865#define M_SQRT2f128 __f128 (1.414213562373095048801688724209698079)
22866#define M_SQRT1_2f128 __f128 (0.707106781186547524400844362104849039)
22867#define M_Ef32x __f32x (2.718281828459045235360287471352662498)
22868#define M_LOG2Ef32x __f32x (1.442695040888963407359924681001892137)
22869#define M_LOG10Ef32x __f32x (0.434294481903251827651128918916605082)
22870#define M_LN2f32x __f32x (0.693147180559945309417232121458176568)
22871#define M_LN10f32x __f32x (2.302585092994045684017991454684364208)
22872#define M_PIf32x __f32x (3.141592653589793238462643383279502884)
22873#define M_PI_2f32x __f32x (1.570796326794896619231321691639751442)
22874#define M_PI_4f32x __f32x (0.785398163397448309615660845819875721)
22875#define M_1_PIf32x __f32x (0.318309886183790671537767526745028724)
22876#define M_2_PIf32x __f32x (0.636619772367581343075535053490057448)
22877#define M_2_SQRTPIf32x __f32x (1.128379167095512573896158903121545172)
22878#define M_SQRT2f32x __f32x (1.414213562373095048801688724209698079)
22879#define M_SQRT1_2f32x __f32x (0.707106781186547524400844362104849039)
22880#define M_Ef64x __f64x (2.718281828459045235360287471352662498)
22881#define M_LOG2Ef64x __f64x (1.442695040888963407359924681001892137)
22882#define M_LOG10Ef64x __f64x (0.434294481903251827651128918916605082)
22883#define M_LN2f64x __f64x (0.693147180559945309417232121458176568)
22884#define M_LN10f64x __f64x (2.302585092994045684017991454684364208)
22885#define M_PIf64x __f64x (3.141592653589793238462643383279502884)
22886#define M_PI_2f64x __f64x (1.570796326794896619231321691639751442)
22887#define M_PI_4f64x __f64x (0.785398163397448309615660845819875721)
22888#define M_1_PIf64x __f64x (0.318309886183790671537767526745028724)
22889#define M_2_PIf64x __f64x (0.636619772367581343075535053490057448)
22890#define M_2_SQRTPIf64x __f64x (1.128379167095512573896158903121545172)
22891#define M_SQRT2f64x __f64x (1.414213562373095048801688724209698079)
22892#define M_SQRT1_2f64x __f64x (0.707106781186547524400844362104849039)
22893#define isgreater(x,y) __builtin_isgreater(x, y)
22894#define isgreaterequal(x,y) __builtin_isgreaterequal(x, y)
22895#define isless(x,y) __builtin_isless(x, y)
22896#define islessequal(x,y) __builtin_islessequal(x, y)
22897#define islessgreater(x,y) __builtin_islessgreater(x, y)
22898#define isunordered(x,y) __builtin_isunordered(x, y)
22899#define __MATH_EVAL_FMT2(x,y) ((x) + (y) + 0.0f)
22900#define iseqsig(x,y) __MATH_TG (__MATH_EVAL_FMT2 (x, y), __iseqsig, ((x), (y)))
22901#define _TIME_H 1
22902#define __need_size_t
22903#define __need_NULL
22904#undef __need_ptrdiff_t
22905#undef __need_size_t
22906#undef __need_wchar_t
22907#undef NULL
22908#define NULL ((void *)0)
22909#undef __need_NULL
22910#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
22911#define _BITS_TIME_H 1
22912#define CLOCKS_PER_SEC ((__clock_t) 1000000)
22913#define CLOCK_REALTIME 0
22914#define CLOCK_MONOTONIC 1
22915#define CLOCK_PROCESS_CPUTIME_ID 2
22916#define CLOCK_THREAD_CPUTIME_ID 3
22917#define CLOCK_MONOTONIC_RAW 4
22918#define CLOCK_REALTIME_COARSE 5
22919#define CLOCK_MONOTONIC_COARSE 6
22920#define CLOCK_BOOTTIME 7
22921#define CLOCK_REALTIME_ALARM 8
22922#define CLOCK_BOOTTIME_ALARM 9
22923#define CLOCK_TAI 11
22924#define TIMER_ABSTIME 1
22925#define _BITS_TIMEX_H 1
22926#define ADJ_OFFSET 0x0001
22927#define ADJ_FREQUENCY 0x0002
22928#define ADJ_MAXERROR 0x0004
22929#define ADJ_ESTERROR 0x0008
22930#define ADJ_STATUS 0x0010
22931#define ADJ_TIMECONST 0x0020
22932#define ADJ_TAI 0x0080
22933#define ADJ_SETOFFSET 0x0100
22934#define ADJ_MICRO 0x1000
22935#define ADJ_NANO 0x2000
22936#define ADJ_TICK 0x4000
22937#define ADJ_OFFSET_SINGLESHOT 0x8001
22938#define ADJ_OFFSET_SS_READ 0xa001
22939#define MOD_OFFSET ADJ_OFFSET
22940#define MOD_FREQUENCY ADJ_FREQUENCY
22941#define MOD_MAXERROR ADJ_MAXERROR
22942#define MOD_ESTERROR ADJ_ESTERROR
22943#define MOD_STATUS ADJ_STATUS
22944#define MOD_TIMECONST ADJ_TIMECONST
22945#define MOD_CLKB ADJ_TICK
22946#define MOD_CLKA ADJ_OFFSET_SINGLESHOT
22947#define MOD_TAI ADJ_TAI
22948#define MOD_MICRO ADJ_MICRO
22949#define MOD_NANO ADJ_NANO
22950#define STA_PLL 0x0001
22951#define STA_PPSFREQ 0x0002
22952#define STA_PPSTIME 0x0004
22953#define STA_FLL 0x0008
22954#define STA_INS 0x0010
22955#define STA_DEL 0x0020
22956#define STA_UNSYNC 0x0040
22957#define STA_FREQHOLD 0x0080
22958#define STA_PPSSIGNAL 0x0100
22959#define STA_PPSJITTER 0x0200
22960#define STA_PPSWANDER 0x0400
22961#define STA_PPSERROR 0x0800
22962#define STA_CLOCKERR 0x1000
22963#define STA_NANO 0x2000
22964#define STA_MODE 0x4000
22965#define STA_CLK 0x8000
22966#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK)
22967#define __struct_tm_defined 1
22968#define __itimerspec_defined 1
22969#define TIME_UTC 1
22970#define __isleap(year) ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
22971#define _SYS_TIME_H 1
22972#define TIMEVAL_TO_TIMESPEC(tv,ts) { (ts)->tv_sec = (tv)->tv_sec; (ts)->tv_nsec = (tv)->tv_usec * 1000; }
22973#define TIMESPEC_TO_TIMEVAL(tv,ts) { (tv)->tv_sec = (ts)->tv_sec; (tv)->tv_usec = (ts)->tv_nsec / 1000; }
22974#define ITIMER_REAL ITIMER_REAL
22975#define ITIMER_VIRTUAL ITIMER_VIRTUAL
22976#define ITIMER_PROF ITIMER_PROF
22977#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
22978#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
22979#define timercmp(a,b,CMP) (((a)->tv_sec == (b)->tv_sec) ? ((a)->tv_usec CMP (b)->tv_usec) : ((a)->tv_sec CMP (b)->tv_sec))
22980#define timeradd(a,b,result) do { (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; if ((result)->tv_usec >= 1000000) { ++(result)->tv_sec; (result)->tv_usec -= 1000000; } } while (0)
22981#define timersub(a,b,result) do { (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; if ((result)->tv_usec < 0) { --(result)->tv_sec; (result)->tv_usec += 1000000; } } while (0)
22982#pragma GCC visibility push(default)
22983#define HAVE_FINITE 1
22984#define finite(x) isfinite(x)
22985#pragma GCC visibility pop
22986#define RUBY
22987#define RB_GNUC_EXTENSION __extension__
22988#define RB_GNUC_EXTENSION_BLOCK(x) __extension__ ({ x; })
22989#define RUBY_MBCHAR_MAXSIZE INT_MAX
22990#define FLUSH_REGISTER_WINDOWS ((void)0)
22991#define RBIMPL_ANYARGS_H
22992#define RBIMPL_ATTR_WEAKREF_H
22993#define RBIMPL_ATTR_WEAKREF(sym) __attribute__((__weakref__(#sym)))
22994#define RBIMPL_INTERN_CLASS_H
22995#define RBIMPL_VALUE_H
22996#define RBIMPL_STATIC_ASSERT_H
22997#define _ASSERT_H 1
22998#define __ASSERT_VOID_CAST (void)
22999#define assert(expr) (__ASSERT_VOID_CAST (0))
23000#define assert_perror(errnum) (__ASSERT_VOID_CAST (0))
23001#undef static_assert
23002#define static_assert _Static_assert
23003#define RBIMPL_STATIC_ASSERT0 __extension__ _Static_assert
23004#define RBIMPL_STATIC_ASSERT(name,expr) RBIMPL_STATIC_ASSERT0(expr, #name ": " #expr)
23005#define RUBY_BACKWARD2_LIMITS_H
23006#define _GCC_LIMITS_H_
23007#define _GCC_NEXT_LIMITS_H
23008#define _LIBC_LIMITS_H_ 1
23009#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
23010#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
23011#undef __GLIBC_USE_LIB_EXT2
23012#define __GLIBC_USE_LIB_EXT2 1
23013#undef __GLIBC_USE_IEC_60559_BFP_EXT
23014#define __GLIBC_USE_IEC_60559_BFP_EXT 1
23015#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X
23016#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1
23017#undef __GLIBC_USE_IEC_60559_FUNCS_EXT
23018#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1
23019#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X
23020#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1
23021#undef __GLIBC_USE_IEC_60559_TYPES_EXT
23022#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
23023#define MB_LEN_MAX 16
23024#define LLONG_MIN (-LLONG_MAX-1)
23025#define LLONG_MAX __LONG_LONG_MAX__
23026#define ULLONG_MAX (LLONG_MAX * 2ULL + 1)
23027#define CHAR_WIDTH 8
23028#define SCHAR_WIDTH 8
23029#define UCHAR_WIDTH 8
23030#define SHRT_WIDTH 16
23031#define USHRT_WIDTH 16
23032#define INT_WIDTH 32
23033#define UINT_WIDTH 32
23034#define LONG_WIDTH __WORDSIZE
23035#define ULONG_WIDTH __WORDSIZE
23036#define LLONG_WIDTH 64
23037#define ULLONG_WIDTH 64
23038#define BOOL_MAX 1
23039#define BOOL_WIDTH 1
23040#define _BITS_POSIX1_LIM_H 1
23041#define __WORDSIZE 64
23042#define __WORDSIZE_TIME64_COMPAT32 1
23043#define __SYSCALL_WORDSIZE 64
23044#define _POSIX_AIO_LISTIO_MAX 2
23045#define _POSIX_AIO_MAX 1
23046#define _POSIX_ARG_MAX 4096
23047#define _POSIX_CHILD_MAX 25
23048#define _POSIX_DELAYTIMER_MAX 32
23049#define _POSIX_HOST_NAME_MAX 255
23050#define _POSIX_LINK_MAX 8
23051#define _POSIX_LOGIN_NAME_MAX 9
23052#define _POSIX_MAX_CANON 255
23053#define _POSIX_MAX_INPUT 255
23054#define _POSIX_MQ_OPEN_MAX 8
23055#define _POSIX_MQ_PRIO_MAX 32
23056#define _POSIX_NAME_MAX 14
23057#define _POSIX_NGROUPS_MAX 8
23058#define _POSIX_OPEN_MAX 20
23059#define _POSIX_FD_SETSIZE _POSIX_OPEN_MAX
23060#define _POSIX_PATH_MAX 256
23061#define _POSIX_PIPE_BUF 512
23062#define _POSIX_RE_DUP_MAX 255
23063#define _POSIX_RTSIG_MAX 8
23064#define _POSIX_SEM_NSEMS_MAX 256
23065#define _POSIX_SEM_VALUE_MAX 32767
23066#define _POSIX_SIGQUEUE_MAX 32
23067#define _POSIX_SSIZE_MAX 32767
23068#define _POSIX_STREAM_MAX 8
23069#define _POSIX_SYMLINK_MAX 255
23070#define _POSIX_SYMLOOP_MAX 8
23071#define _POSIX_TIMER_MAX 32
23072#define _POSIX_TTY_NAME_MAX 9
23073#define _POSIX_TZNAME_MAX 6
23074#define _POSIX_QLIMIT 1
23075#define _POSIX_HIWAT _POSIX_PIPE_BUF
23076#define _POSIX_UIO_MAXIOV 16
23077#define _POSIX_CLOCKRES_MIN 20000000
23078#define __undef_NR_OPEN
23079#define __undef_LINK_MAX
23080#define __undef_OPEN_MAX
23081#define __undef_ARG_MAX
23082#define _LINUX_LIMITS_H
23083#define NR_OPEN 1024
23084#define NGROUPS_MAX 65536
23085#define ARG_MAX 131072
23086#define LINK_MAX 127
23087#define MAX_CANON 255
23088#define MAX_INPUT 255
23089#define NAME_MAX 255
23090#define PATH_MAX 4096
23091#define PIPE_BUF 4096
23092#define XATTR_NAME_MAX 255
23093#define XATTR_SIZE_MAX 65536
23094#define XATTR_LIST_MAX 65536
23095#define RTSIG_MAX 32
23096#undef NR_OPEN
23097#undef __undef_NR_OPEN
23098#undef LINK_MAX
23099#undef __undef_LINK_MAX
23100#undef OPEN_MAX
23101#undef __undef_OPEN_MAX
23102#undef ARG_MAX
23103#undef __undef_ARG_MAX
23104#define _POSIX_THREAD_KEYS_MAX 128
23105#define PTHREAD_KEYS_MAX 1024
23106#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
23107#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS
23108#define _POSIX_THREAD_THREADS_MAX 64
23109#undef PTHREAD_THREADS_MAX
23110#define AIO_PRIO_DELTA_MAX 20
23111#define PTHREAD_STACK_MIN 16384
23112#define DELAYTIMER_MAX 2147483647
23113#define TTY_NAME_MAX 32
23114#define LOGIN_NAME_MAX 256
23115#define HOST_NAME_MAX 64
23116#define MQ_PRIO_MAX 32768
23117#define SEM_VALUE_MAX (2147483647)
23118#define SSIZE_MAX LONG_MAX
23119#define _BITS_POSIX2_LIM_H 1
23120#define _POSIX2_BC_BASE_MAX 99
23121#define _POSIX2_BC_DIM_MAX 2048
23122#define _POSIX2_BC_SCALE_MAX 99
23123#define _POSIX2_BC_STRING_MAX 1000
23124#define _POSIX2_COLL_WEIGHTS_MAX 2
23125#define _POSIX2_EXPR_NEST_MAX 32
23126#define _POSIX2_LINE_MAX 2048
23127#define _POSIX2_RE_DUP_MAX 255
23128#define _POSIX2_CHARCLASS_NAME_MAX 14
23129#define BC_BASE_MAX _POSIX2_BC_BASE_MAX
23130#define BC_DIM_MAX _POSIX2_BC_DIM_MAX
23131#define BC_SCALE_MAX _POSIX2_BC_SCALE_MAX
23132#define BC_STRING_MAX _POSIX2_BC_STRING_MAX
23133#define COLL_WEIGHTS_MAX 255
23134#define EXPR_NEST_MAX _POSIX2_EXPR_NEST_MAX
23135#define LINE_MAX _POSIX2_LINE_MAX
23136#define CHARCLASS_NAME_MAX 2048
23137#define RE_DUP_MAX (0x7fff)
23138#define _XOPEN_LIM_H 1
23139#define _XOPEN_IOV_MAX _POSIX_UIO_MAXIOV
23140#define _BITS_UIO_LIM_H 1
23141#define __IOV_MAX 1024
23142#define IOV_MAX __IOV_MAX
23143#define NL_ARGMAX _POSIX_ARG_MAX
23144#define NL_LANGMAX _POSIX2_LINE_MAX
23145#define NL_MSGMAX INT_MAX
23146#define NL_NMAX INT_MAX
23147#define NL_SETMAX INT_MAX
23148#define NL_TEXTMAX INT_MAX
23149#define NZERO 20
23150#define WORD_BIT 32
23151#define LONG_BIT 64
23152#undef _GCC_NEXT_LIMITS_H
23153#define _LIMITS_H___
23154#undef CHAR_BIT
23155#define CHAR_BIT __CHAR_BIT__
23156#undef SCHAR_MIN
23157#define SCHAR_MIN (-SCHAR_MAX - 1)
23158#undef SCHAR_MAX
23159#define SCHAR_MAX __SCHAR_MAX__
23160#undef UCHAR_MAX
23161#define UCHAR_MAX (SCHAR_MAX * 2 + 1)
23162#undef CHAR_MIN
23163#define CHAR_MIN SCHAR_MIN
23164#undef CHAR_MAX
23165#define CHAR_MAX SCHAR_MAX
23166#undef SHRT_MIN
23167#define SHRT_MIN (-SHRT_MAX - 1)
23168#undef SHRT_MAX
23169#define SHRT_MAX __SHRT_MAX__
23170#undef USHRT_MAX
23171#define USHRT_MAX (SHRT_MAX * 2 + 1)
23172#undef INT_MIN
23173#define INT_MIN (-INT_MAX - 1)
23174#undef INT_MAX
23175#define INT_MAX __INT_MAX__
23176#undef UINT_MAX
23177#define UINT_MAX (INT_MAX * 2U + 1U)
23178#undef LONG_MIN
23179#define LONG_MIN (-LONG_MAX - 1L)
23180#undef LONG_MAX
23181#define LONG_MAX __LONG_MAX__
23182#undef ULONG_MAX
23183#define ULONG_MAX (LONG_MAX * 2UL + 1UL)
23184#undef LLONG_MIN
23185#define LLONG_MIN (-LLONG_MAX - 1LL)
23186#undef LLONG_MAX
23187#define LLONG_MAX __LONG_LONG_MAX__
23188#undef ULLONG_MAX
23189#define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
23190#undef LONG_LONG_MIN
23191#define LONG_LONG_MIN (-LONG_LONG_MAX - 1LL)
23192#undef LONG_LONG_MAX
23193#define LONG_LONG_MAX __LONG_LONG_MAX__
23194#undef ULONG_LONG_MAX
23195#define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1ULL)
23196#undef CHAR_WIDTH
23197#define CHAR_WIDTH __SCHAR_WIDTH__
23198#undef SCHAR_WIDTH
23199#define SCHAR_WIDTH __SCHAR_WIDTH__
23200#undef UCHAR_WIDTH
23201#define UCHAR_WIDTH __SCHAR_WIDTH__
23202#undef SHRT_WIDTH
23203#define SHRT_WIDTH __SHRT_WIDTH__
23204#undef USHRT_WIDTH
23205#define USHRT_WIDTH __SHRT_WIDTH__
23206#undef INT_WIDTH
23207#define INT_WIDTH __INT_WIDTH__
23208#undef UINT_WIDTH
23209#define UINT_WIDTH __INT_WIDTH__
23210#undef LONG_WIDTH
23211#define LONG_WIDTH __LONG_WIDTH__
23212#undef ULONG_WIDTH
23213#define ULONG_WIDTH __LONG_WIDTH__
23214#undef LLONG_WIDTH
23215#define LLONG_WIDTH __LONG_LONG_WIDTH__
23216#undef ULLONG_WIDTH
23217#define ULLONG_WIDTH __LONG_LONG_WIDTH__
23218#define SIGNED_VALUE long
23219#define SIZEOF_VALUE SIZEOF_LONG
23220#define PRI_VALUE_PREFIX "l"
23221#define RBIMPL_VALUE_NULL 0UL
23222#define RBIMPL_VALUE_ONE 1UL
23223#define RBIMPL_VALUE_FULL ULONG_MAX
23224#pragma GCC visibility push(default)
23225#pragma GCC visibility pop
23226#define RBIMPL_INTERN_VM_H
23227#pragma GCC visibility push(default)
23228#define HAVE_RB_DEFINE_ALLOC_FUNC 1
23229#pragma GCC visibility pop
23230#define RBIMPL_METHOD_H
23231#pragma GCC visibility push(default)
23232#pragma GCC visibility pop
23233#define RBIMPL_CFUNC_IS_rb_f_notimplement(f) __builtin_types_compatible_p( __typeof__(f), __typeof__(rb_f_notimplement))
23234#define RBIMPL_ANYARGS_DISPATCH(expr,truthy,falsy) __builtin_choose_expr( __builtin_choose_expr( __builtin_constant_p(expr), (expr), 0), (truthy), (falsy))
23235#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_singleton_method_m2, rb_define_singleton_method_m3)
23236#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_singleton_method_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_m2(n))
23237#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_singleton_method_00, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_m1(n))
23238#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_singleton_method_01, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_00(n))
23239#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_singleton_method_02, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_01(n))
23240#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_singleton_method_03, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_02(n))
23241#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_singleton_method_04, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_03(n))
23242#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_singleton_method_05, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_04(n))
23243#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_singleton_method_06, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_05(n))
23244#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_singleton_method_07, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_06(n))
23245#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_singleton_method_08, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_07(n))
23246#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_singleton_method_09, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_08(n))
23247#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_singleton_method_10, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_09(n))
23248#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_singleton_method_11, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_10(n))
23249#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_singleton_method_12, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_11(n))
23250#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_singleton_method_13, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_12(n))
23251#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_singleton_method_14, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_13(n))
23252#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_singleton_method_15, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_14(n))
23253#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_protected_method_m2, rb_define_protected_method_m3)
23254#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_protected_method_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_m2(n))
23255#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_protected_method_00, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_m1(n))
23256#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_protected_method_01, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_00(n))
23257#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_protected_method_02, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_01(n))
23258#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_protected_method_03, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_02(n))
23259#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_protected_method_04, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_03(n))
23260#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_protected_method_05, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_04(n))
23261#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_protected_method_06, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_05(n))
23262#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_protected_method_07, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_06(n))
23263#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_protected_method_08, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_07(n))
23264#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_protected_method_09, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_08(n))
23265#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_protected_method_10, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_09(n))
23266#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_protected_method_11, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_10(n))
23267#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_protected_method_12, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_11(n))
23268#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_protected_method_13, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_12(n))
23269#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_protected_method_14, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_13(n))
23270#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_protected_method_15, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_14(n))
23271#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_private_method_m2, rb_define_private_method_m3)
23272#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_private_method_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_m2(n))
23273#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_private_method_00, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_m1(n))
23274#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_private_method_01, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_00(n))
23275#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_private_method_02, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_01(n))
23276#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_private_method_03, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_02(n))
23277#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_private_method_04, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_03(n))
23278#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_private_method_05, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_04(n))
23279#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_private_method_06, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_05(n))
23280#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_private_method_07, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_06(n))
23281#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_private_method_08, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_07(n))
23282#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_private_method_09, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_08(n))
23283#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_private_method_10, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_09(n))
23284#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_private_method_11, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_10(n))
23285#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_private_method_12, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_11(n))
23286#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_private_method_13, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_12(n))
23287#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_private_method_14, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_13(n))
23288#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_private_method_15, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_14(n))
23289#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_module_function_m2, rb_define_module_function_m3)
23290#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_module_function_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_m2(n))
23291#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_module_function_00, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_m1(n))
23292#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_module_function_01, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_00(n))
23293#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_module_function_02, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_01(n))
23294#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_module_function_03, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_02(n))
23295#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_module_function_04, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_03(n))
23296#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_module_function_05, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_04(n))
23297#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_module_function_06, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_05(n))
23298#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_module_function_07, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_06(n))
23299#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_module_function_08, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_07(n))
23300#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_module_function_09, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_08(n))
23301#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_module_function_10, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_09(n))
23302#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_module_function_11, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_10(n))
23303#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_module_function_12, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_11(n))
23304#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_module_function_13, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_12(n))
23305#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_module_function_14, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_13(n))
23306#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_module_function_15, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_14(n))
23307#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_global_function_m2, rb_define_global_function_m3)
23308#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_global_function_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_m2(n))
23309#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_global_function_00, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_m1(n))
23310#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_global_function_01, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_00(n))
23311#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_global_function_02, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_01(n))
23312#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_global_function_03, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_02(n))
23313#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_global_function_04, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_03(n))
23314#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_global_function_05, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_04(n))
23315#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_global_function_06, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_05(n))
23316#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_global_function_07, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_06(n))
23317#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_global_function_08, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_07(n))
23318#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_global_function_09, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_08(n))
23319#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_global_function_10, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_09(n))
23320#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_global_function_11, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_10(n))
23321#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_global_function_12, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_11(n))
23322#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_global_function_13, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_12(n))
23323#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_global_function_14, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_13(n))
23324#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_global_function_15, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_14(n))
23325#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_method_id_m2, rb_define_method_id_m3)
23326#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_method_id_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_m2(n))
23327#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_method_id_00, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_m1(n))
23328#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_method_id_01, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_00(n))
23329#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_method_id_02, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_01(n))
23330#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_method_id_03, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_02(n))
23331#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_method_id_04, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_03(n))
23332#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_method_id_05, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_04(n))
23333#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_method_id_06, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_05(n))
23334#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_method_id_07, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_06(n))
23335#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_method_id_08, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_07(n))
23336#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_method_id_09, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_08(n))
23337#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_method_id_10, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_09(n))
23338#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_method_id_11, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_10(n))
23339#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_method_id_12, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_11(n))
23340#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_method_id_13, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_12(n))
23341#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_method_id_14, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_13(n))
23342#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_method_id_15, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_14(n))
23343#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_method_m2, rb_define_method_m3)
23344#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_method_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_method_m2(n))
23345#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_method_00, RBIMPL_ANYARGS_DISPATCH_rb_define_method_m1(n))
23346#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_method_01, RBIMPL_ANYARGS_DISPATCH_rb_define_method_00(n))
23347#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_method_02, RBIMPL_ANYARGS_DISPATCH_rb_define_method_01(n))
23348#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_method_03, RBIMPL_ANYARGS_DISPATCH_rb_define_method_02(n))
23349#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_method_04, RBIMPL_ANYARGS_DISPATCH_rb_define_method_03(n))
23350#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_method_05, RBIMPL_ANYARGS_DISPATCH_rb_define_method_04(n))
23351#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_method_06, RBIMPL_ANYARGS_DISPATCH_rb_define_method_05(n))
23352#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_method_07, RBIMPL_ANYARGS_DISPATCH_rb_define_method_06(n))
23353#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_method_08, RBIMPL_ANYARGS_DISPATCH_rb_define_method_07(n))
23354#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_method_09, RBIMPL_ANYARGS_DISPATCH_rb_define_method_08(n))
23355#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_method_10, RBIMPL_ANYARGS_DISPATCH_rb_define_method_09(n))
23356#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_method_11, RBIMPL_ANYARGS_DISPATCH_rb_define_method_10(n))
23357#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_method_12, RBIMPL_ANYARGS_DISPATCH_rb_define_method_11(n))
23358#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_method_13, RBIMPL_ANYARGS_DISPATCH_rb_define_method_12(n))
23359#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_method_14, RBIMPL_ANYARGS_DISPATCH_rb_define_method_13(n))
23360#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_method_15, RBIMPL_ANYARGS_DISPATCH_rb_define_method_14(n))
23361#define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method(n,f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_singleton_method_m3, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_15(n))
23362#define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method(n,f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_protected_method_m3, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_15(n))
23363#define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method(n,f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_private_method_m3, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_15(n))
23364#define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function(n,f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_module_function_m3, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_15(n))
23365#define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function(n,f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_global_function_m3, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_15(n))
23366#define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id(n,f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_method_id_m3, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_15(n))
23367#define RBIMPL_ANYARGS_DISPATCH_rb_define_method(n,f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_method_m3, RBIMPL_ANYARGS_DISPATCH_rb_define_method_15(n))
23368#define RBIMPL_ANYARGS_ATTRSET(sym) RBIMPL_ATTR_MAYBE_UNUSED() RBIMPL_ATTR_NONNULL(()) RBIMPL_ATTR_WEAKREF(sym)
23369#define RBIMPL_ANYARGS_DECL(sym,...) RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _m3(__VA_ARGS__, VALUE(*)(ANYARGS), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _m2(__VA_ARGS__, VALUE(*)(VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _m1(__VA_ARGS__, VALUE(*)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _00(__VA_ARGS__, VALUE(*)(VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _01(__VA_ARGS__, VALUE(*)(VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _02(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _03(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _04(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _05(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _06(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _07(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _08(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _09(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _10(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _11(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _12(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _13(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _14(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _15(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int);
23370#define rb_define_method(klass,mid,func,arity) RBIMPL_ANYARGS_DISPATCH_rb_define_method((arity), (func))((klass), (mid), (func), (arity))
23371#define rb_define_method_id(klass,mid,func,arity) RBIMPL_ANYARGS_DISPATCH_rb_define_method_id((arity), (func))((klass), (mid), (func), (arity))
23372#define rb_define_singleton_method(obj,mid,func,arity) RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method((arity), (func))((obj), (mid), (func), (arity))
23373#define rb_define_protected_method(klass,mid,func,arity) RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method((arity), (func))((klass), (mid), (func), (arity))
23374#define rb_define_private_method(klass,mid,func,arity) RBIMPL_ANYARGS_DISPATCH_rb_define_private_method((arity), (func))((klass), (mid), (func), (arity))
23375#define rb_define_module_function(mod,mid,func,arity) RBIMPL_ANYARGS_DISPATCH_rb_define_module_function((arity), (func))((mod), (mid), (func), (arity))
23376#define rb_define_global_function(mid,func,arity) RBIMPL_ANYARGS_DISPATCH_rb_define_global_function((arity), (func))((mid), (func), (arity))
23377#define RUBY_METHOD_FUNC(func) RBIMPL_CAST((VALUE (*)(ANYARGS))(func))
23378#define RBIMPL_ARITHMETIC_H
23379#define RBIMPL_ARITHMETIC_CHAR_H
23380#define RBIMPL_ARITHMETIC_INT_H
23381#define RBIMPL_ARITHMETIC_FIXNUM_H
23382#define FIXABLE RB_FIXABLE
23383#define FIXNUM_MAX RUBY_FIXNUM_MAX
23384#define FIXNUM_MIN RUBY_FIXNUM_MIN
23385#define NEGFIXABLE RB_NEGFIXABLE
23386#define POSFIXABLE RB_POSFIXABLE
23387#define RB_POSFIXABLE(_) ((_) < RUBY_FIXNUM_MAX + 1)
23388#define RB_NEGFIXABLE(_) ((_) >= RUBY_FIXNUM_MIN)
23389#define RB_FIXABLE(_) (RB_POSFIXABLE(_) && RB_NEGFIXABLE(_))
23390#define RUBY_FIXNUM_MAX (LONG_MAX / 2)
23391#define RUBY_FIXNUM_MIN (LONG_MIN / 2)
23392#define RBIMPL_ARITHMETIC_INTPTR_T_H
23393#define rb_int_new rb_int2inum
23394#define rb_uint_new rb_uint2inum
23395#pragma GCC visibility push(default)
23396#pragma GCC visibility pop
23397#define RBIMPL_ARITHMETIC_LONG_H
23398#define RBIMPL_ATTR_ARTIFICIAL_H
23399#define RBIMPL_ATTR_ARTIFICIAL() __attribute__((__artificial__))
23400#define RBIMPL_ATTR_CONSTEXPR_H
23401#define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 0
23402#define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 0
23403#define RBIMPL_ATTR_CONSTEXPR(_)
23404#define RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(_) RBIMPL_ATTR_CONSTEXPR(_)
23405#define RBIMPL_SPECIAL_CONSTS_H
23406#define RBIMPL_ATTR_ENUM_EXTENSIBILITY_H
23407#define RBIMPL_ATTR_ENUM_EXTENSIBILITY(_)
23408#define USE_FLONUM 1
23409#define RTEST RB_TEST
23410#define FIXNUM_P RB_FIXNUM_P
23411#define IMMEDIATE_P RB_IMMEDIATE_P
23412#define NIL_P RB_NIL_P
23413#define SPECIAL_CONST_P RB_SPECIAL_CONST_P
23414#define STATIC_SYM_P RB_STATIC_SYM_P
23415#define Qfalse RUBY_Qfalse
23416#define Qnil RUBY_Qnil
23417#define Qtrue RUBY_Qtrue
23418#define Qundef RUBY_Qundef
23419#define FIXNUM_FLAG RUBY_FIXNUM_FLAG
23420#define FLONUM_FLAG RUBY_FLONUM_FLAG
23421#define FLONUM_MASK RUBY_FLONUM_MASK
23422#define FLONUM_P RB_FLONUM_P
23423#define IMMEDIATE_MASK RUBY_IMMEDIATE_MASK
23424#define SYMBOL_FLAG RUBY_SYMBOL_FLAG
23425#define RB_FIXNUM_P RB_FIXNUM_P
23426#define RB_FLONUM_P RB_FLONUM_P
23427#define RB_IMMEDIATE_P RB_IMMEDIATE_P
23428#define RB_NIL_P RB_NIL_P
23429#define RB_SPECIAL_CONST_P RB_SPECIAL_CONST_P
23430#define RB_STATIC_SYM_P RB_STATIC_SYM_P
23431#define RB_TEST RB_TEST
23432#define RUBY_Qfalse RBIMPL_CAST((VALUE)RUBY_Qfalse)
23433#define RUBY_Qtrue RBIMPL_CAST((VALUE)RUBY_Qtrue)
23434#define RUBY_Qnil RBIMPL_CAST((VALUE)RUBY_Qnil)
23435#define RUBY_Qundef RBIMPL_CAST((VALUE)RUBY_Qundef)
23436#define FIX2LONG RB_FIX2LONG
23437#define FIX2ULONG RB_FIX2ULONG
23438#define INT2FIX RB_INT2FIX
23439#define LONG2FIX RB_INT2FIX
23440#define LONG2NUM RB_LONG2NUM
23441#define NUM2LONG RB_NUM2LONG
23442#define NUM2ULONG RB_NUM2ULONG
23443#define RB_FIX2LONG rb_fix2long
23444#define RB_FIX2ULONG rb_fix2ulong
23445#define RB_LONG2FIX RB_INT2FIX
23446#define RB_LONG2NUM rb_long2num_inline
23447#define RB_NUM2LONG rb_num2long_inline
23448#define RB_NUM2ULONG rb_num2ulong_inline
23449#define RB_ULONG2NUM rb_ulong2num_inline
23450#define ULONG2NUM RB_ULONG2NUM
23451#define rb_fix_new RB_INT2FIX
23452#define rb_long2int rb_long2int_inline
23453#define RB_INT2FIX RB_INT2FIX
23454#pragma GCC visibility push(default)
23455#pragma GCC visibility pop
23456#undef INT2FIX
23457#define INT2FIX(i) __builtin_choose_expr( __builtin_constant_p(i), RBIMPL_CAST((VALUE)(i)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(i))
23458#define RB_INT2NUM rb_int2num_inline
23459#define RB_NUM2INT rb_num2int_inline
23460#define RB_UINT2NUM rb_uint2num_inline
23461#define FIX2INT RB_FIX2INT
23462#define FIX2UINT RB_FIX2UINT
23463#define INT2NUM RB_INT2NUM
23464#define NUM2INT RB_NUM2INT
23465#define NUM2UINT RB_NUM2UINT
23466#define UINT2NUM RB_UINT2NUM
23467#define RB_FIX2INT RB_FIX2INT
23468#define RB_NUM2UINT RB_NUM2UINT
23469#define RB_FIX2UINT RB_FIX2UINT
23470#pragma GCC visibility push(default)
23471#pragma GCC visibility pop
23472#pragma GCC diagnostic push
23473#pragma GCC diagnostic ignored "-Wtype-limits"
23474#pragma GCC diagnostic pop
23475#define RBIMPL_RSTRING_H
23476#define RBIMPL_RBASIC_H
23477#define RBIMPL_ATTR_NOALIAS_H
23478#define RBIMPL_ATTR_NOALIAS()
23479#define RBASIC(obj) RBIMPL_CAST((struct RBasic *)(obj))
23480#define RBASIC_CLASS RBASIC_CLASS
23481#define RBIMPL_RVALUE_EMBED_LEN_MAX 3
23482#define RVALUE_EMBED_LEN_MAX RVALUE_EMBED_LEN_MAX
23483#define RBIMPL_EMBED_LEN_MAX_OF(T) RBIMPL_CAST((int)(sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]) / (sizeof(T))))
23484#pragma GCC visibility push(default)
23485#pragma GCC visibility pop
23486#define RBIMPL_FL_TYPE_H
23487#define RBIMPL_ATTR_FLAG_ENUM_H
23488#define RBIMPL_ATTR_FLAG_ENUM()
23489#define RBIMPL_VALUE_TYPE_H
23490#define RBIMPL_CONSTANT_P_H
23491#define RBIMPL_CONSTANT_P(expr) __builtin_constant_p(expr)
23492#define RBIMPL_ERROR_H
23493#define RB_IO_WAIT_READABLE RB_IO_WAIT_READABLE
23494#define RB_IO_WAIT_WRITABLE RB_IO_WAIT_WRITABLE
23495#pragma GCC visibility push(default)
23496#define ruby_verbose (*rb_ruby_verbose_ptr())
23497#define ruby_debug (*rb_ruby_debug_ptr())
23498#pragma GCC visibility pop
23499#define T_ARRAY RUBY_T_ARRAY
23500#define T_BIGNUM RUBY_T_BIGNUM
23501#define T_CLASS RUBY_T_CLASS
23502#define T_COMPLEX RUBY_T_COMPLEX
23503#define T_DATA RUBY_T_DATA
23504#define T_FALSE RUBY_T_FALSE
23505#define T_FILE RUBY_T_FILE
23506#define T_FIXNUM RUBY_T_FIXNUM
23507#define T_FLOAT RUBY_T_FLOAT
23508#define T_HASH RUBY_T_HASH
23509#define T_ICLASS RUBY_T_ICLASS
23510#define T_IMEMO RUBY_T_IMEMO
23511#define T_MASK RUBY_T_MASK
23512#define T_MATCH RUBY_T_MATCH
23513#define T_MODULE RUBY_T_MODULE
23514#define T_MOVED RUBY_T_MOVED
23515#define T_NIL RUBY_T_NIL
23516#define T_NODE RUBY_T_NODE
23517#define T_NONE RUBY_T_NONE
23518#define T_OBJECT RUBY_T_OBJECT
23519#define T_RATIONAL RUBY_T_RATIONAL
23520#define T_REGEXP RUBY_T_REGEXP
23521#define T_STRING RUBY_T_STRING
23522#define T_STRUCT RUBY_T_STRUCT
23523#define T_SYMBOL RUBY_T_SYMBOL
23524#define T_TRUE RUBY_T_TRUE
23525#define T_UNDEF RUBY_T_UNDEF
23526#define T_ZOMBIE RUBY_T_ZOMBIE
23527#define BUILTIN_TYPE RB_BUILTIN_TYPE
23528#define DYNAMIC_SYM_P RB_DYNAMIC_SYM_P
23529#define RB_INTEGER_TYPE_P rb_integer_type_p
23530#define SYMBOL_P RB_SYMBOL_P
23531#define rb_type_p RB_TYPE_P
23532#define RB_BUILTIN_TYPE RB_BUILTIN_TYPE
23533#define RB_DYNAMIC_SYM_P RB_DYNAMIC_SYM_P
23534#define RB_FLOAT_TYPE_P RB_FLOAT_TYPE_P
23535#define RB_SYMBOL_P RB_SYMBOL_P
23536#define RB_TYPE_P RB_TYPE_P
23537#define Check_Type Check_Type
23538#define RBIMPL_ASSERT_TYPE(v,t) RBIMPL_ASSERT_OR_ASSUME(RB_TYPE_P((v), (t)))
23539#define TYPE(_) RBIMPL_CAST((int)rb_type(_))
23540#pragma GCC visibility push(default)
23541#pragma GCC visibility pop
23542#define RBIMPL_HAVE_ENUM_ATTRIBUTE 1
23543#define RBIMPL_WIDER_ENUM 1
23544#define FL_SINGLETON RBIMPL_CAST((VALUE)RUBY_FL_SINGLETON)
23545#define FL_WB_PROTECTED RBIMPL_CAST((VALUE)RUBY_FL_WB_PROTECTED)
23546#define FL_PROMOTED0 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED0)
23547#define FL_PROMOTED1 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED1)
23548#define FL_FINALIZE RBIMPL_CAST((VALUE)RUBY_FL_FINALIZE)
23549#define FL_TAINT RBIMPL_CAST((VALUE)RUBY_FL_TAINT)
23550#define FL_SHAREABLE RBIMPL_CAST((VALUE)RUBY_FL_SHAREABLE)
23551#define FL_UNTRUSTED RBIMPL_CAST((VALUE)RUBY_FL_UNTRUSTED)
23552#define FL_SEEN_OBJ_ID RBIMPL_CAST((VALUE)RUBY_FL_SEEN_OBJ_ID)
23553#define FL_EXIVAR RBIMPL_CAST((VALUE)RUBY_FL_EXIVAR)
23554#define FL_FREEZE RBIMPL_CAST((VALUE)RUBY_FL_FREEZE)
23555#define FL_USHIFT RBIMPL_CAST((VALUE)RUBY_FL_USHIFT)
23556#define FL_USER0 RBIMPL_CAST((VALUE)RUBY_FL_USER0)
23557#define FL_USER1 RBIMPL_CAST((VALUE)RUBY_FL_USER1)
23558#define FL_USER2 RBIMPL_CAST((VALUE)RUBY_FL_USER2)
23559#define FL_USER3 RBIMPL_CAST((VALUE)RUBY_FL_USER3)
23560#define FL_USER4 RBIMPL_CAST((VALUE)RUBY_FL_USER4)
23561#define FL_USER5 RBIMPL_CAST((VALUE)RUBY_FL_USER5)
23562#define FL_USER6 RBIMPL_CAST((VALUE)RUBY_FL_USER6)
23563#define FL_USER7 RBIMPL_CAST((VALUE)RUBY_FL_USER7)
23564#define FL_USER8 RBIMPL_CAST((VALUE)RUBY_FL_USER8)
23565#define FL_USER9 RBIMPL_CAST((VALUE)RUBY_FL_USER9)
23566#define FL_USER10 RBIMPL_CAST((VALUE)RUBY_FL_USER10)
23567#define FL_USER11 RBIMPL_CAST((VALUE)RUBY_FL_USER11)
23568#define FL_USER12 RBIMPL_CAST((VALUE)RUBY_FL_USER12)
23569#define FL_USER13 RBIMPL_CAST((VALUE)RUBY_FL_USER13)
23570#define FL_USER14 RBIMPL_CAST((VALUE)RUBY_FL_USER14)
23571#define FL_USER15 RBIMPL_CAST((VALUE)RUBY_FL_USER15)
23572#define FL_USER16 RBIMPL_CAST((VALUE)RUBY_FL_USER16)
23573#define FL_USER17 RBIMPL_CAST((VALUE)RUBY_FL_USER17)
23574#define FL_USER18 RBIMPL_CAST((VALUE)RUBY_FL_USER18)
23575#define FL_USER19 RBIMPL_CAST((VALUE)(unsigned int)RUBY_FL_USER19)
23576#define ELTS_SHARED RUBY_ELTS_SHARED
23577#define RB_OBJ_FREEZE rb_obj_freeze_inline
23578#define RUBY_ELTS_SHARED RUBY_ELTS_SHARED
23579#define RB_FL_ABLE RB_FL_ABLE
23580#define RB_FL_ALL RB_FL_ALL
23581#define RB_FL_ALL_RAW RB_FL_ALL_RAW
23582#define RB_FL_ANY RB_FL_ANY
23583#define RB_FL_ANY_RAW RB_FL_ANY_RAW
23584#define RB_FL_REVERSE RB_FL_REVERSE
23585#define RB_FL_REVERSE_RAW RB_FL_REVERSE_RAW
23586#define RB_FL_SET RB_FL_SET
23587#define RB_FL_SET_RAW RB_FL_SET_RAW
23588#define RB_FL_TEST RB_FL_TEST
23589#define RB_FL_TEST_RAW RB_FL_TEST_RAW
23590#define RB_FL_UNSET RB_FL_UNSET
23591#define RB_FL_UNSET_RAW RB_FL_UNSET_RAW
23592#define RB_OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
23593#define RB_OBJ_FROZEN RB_OBJ_FROZEN
23594#define RB_OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
23595#define RB_OBJ_INFECT RB_OBJ_INFECT
23596#define RB_OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
23597#define RB_OBJ_TAINT RB_OBJ_TAINT
23598#define RB_OBJ_TAINTABLE RB_OBJ_TAINTABLE
23599#define RB_OBJ_TAINTED RB_OBJ_TAINTED
23600#define RB_OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
23601#define RB_OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
23602#define RB_OBJ_UNTRUST RB_OBJ_TAINT
23603#define RB_OBJ_UNTRUSTED RB_OBJ_TAINTED
23604#define FL_ABLE RB_FL_ABLE
23605#define FL_ALL RB_FL_ALL
23606#define FL_ALL_RAW RB_FL_ALL_RAW
23607#define FL_ANY RB_FL_ANY
23608#define FL_ANY_RAW RB_FL_ANY_RAW
23609#define FL_REVERSE RB_FL_REVERSE
23610#define FL_REVERSE_RAW RB_FL_REVERSE_RAW
23611#define FL_SET RB_FL_SET
23612#define FL_SET_RAW RB_FL_SET_RAW
23613#define FL_TEST RB_FL_TEST
23614#define FL_TEST_RAW RB_FL_TEST_RAW
23615#define FL_UNSET RB_FL_UNSET
23616#define FL_UNSET_RAW RB_FL_UNSET_RAW
23617#define OBJ_FREEZE RB_OBJ_FREEZE
23618#define OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
23619#define OBJ_FROZEN RB_OBJ_FROZEN
23620#define OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
23621#define OBJ_INFECT RB_OBJ_INFECT
23622#define OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
23623#define OBJ_TAINT RB_OBJ_TAINT
23624#define OBJ_TAINTABLE RB_OBJ_TAINTABLE
23625#define OBJ_TAINTED RB_OBJ_TAINTED
23626#define OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
23627#define OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
23628#define OBJ_UNTRUST RB_OBJ_UNTRUST
23629#define OBJ_UNTRUSTED RB_OBJ_UNTRUSTED
23630#define RBIMPL_FL_USER_N(n) RUBY_FL_USER ##n = (1<<(RUBY_FL_USHIFT+n))
23631#undef RBIMPL_FL_USER_N
23632#undef RBIMPL_WIDER_ENUM
23633#undef RBIMPL_HAVE_ENUM_ATTRIBUTE
23634#pragma GCC visibility push(default)
23635#pragma GCC visibility pop
23636#define RSTRING(obj) RBIMPL_CAST((struct RString *)(obj))
23637#define RSTRING_NOEMBED RSTRING_NOEMBED
23638#define RSTRING_EMBED_LEN_MASK RSTRING_EMBED_LEN_MASK
23639#define RSTRING_EMBED_LEN_SHIFT RSTRING_EMBED_LEN_SHIFT
23640#define RSTRING_EMBED_LEN_MAX RSTRING_EMBED_LEN_MAX
23641#define RSTRING_FSTR RSTRING_FSTR
23642#define RSTRING_EMBED_LEN RSTRING_EMBED_LEN
23643#define RSTRING_LEN RSTRING_LEN
23644#define RSTRING_LENINT RSTRING_LENINT
23645#define RSTRING_PTR RSTRING_PTR
23646#define RSTRING_END RSTRING_END
23647#define StringValue(v) rb_string_value(&(v))
23648#define StringValuePtr(v) rb_string_value_ptr(&(v))
23649#define StringValueCStr(v) rb_string_value_cstr(&(v))
23650#define SafeStringValue(v) StringValue(v)
23651#define ExportStringValue(v) do { StringValue(v); (v) = rb_str_export(v); } while (0)
23652#pragma GCC visibility push(default)
23653#define Check_SafeStr(v) rb_check_safe_str(RBIMPL_CAST((VALUE)(v)))
23654#pragma GCC visibility pop
23655#pragma GCC diagnostic push
23656#pragma GCC diagnostic pop
23657#define RSTRING_GETMEM(str,ptrvar,lenvar) __extension__ ({ struct RString rbimpl_str = rbimpl_rstring_getmem(str); (ptrvar) = rbimpl_str.as.heap.ptr; (lenvar) = rbimpl_str.as.heap.len; })
23658#define RB_NUM2CHR rb_num2char_inline
23659#define NUM2CHR RB_NUM2CHR
23660#define CHR2FIX RB_CHR2FIX
23661#define RB_CHR2FIX RB_CHR2FIX
23662#define RBIMPL_ARITHMETIC_DOUBLE_H
23663#define NUM2DBL rb_num2dbl
23664#define RFLOAT_VALUE rb_float_value
23665#define DBL2NUM rb_float_new
23666#pragma GCC visibility push(default)
23667#pragma GCC visibility pop
23668#define RBIMPL_ARITHMETIC_GID_T_H
23669#define RBIMPL_ARITHMETIC_LONG_LONG_H
23670#define RB_LL2NUM rb_ll2num_inline
23671#define RB_ULL2NUM rb_ull2num_inline
23672#define LL2NUM RB_LL2NUM
23673#define ULL2NUM RB_ULL2NUM
23674#define RB_NUM2LL rb_num2ll_inline
23675#define RB_NUM2ULL rb_num2ull_inline
23676#define NUM2LL RB_NUM2LL
23677#define NUM2ULL RB_NUM2ULL
23678#pragma GCC visibility push(default)
23679#pragma GCC visibility pop
23680#define RBIMPL_ARITHMETIC_MODE_T_H
23681#define RBIMPL_ARITHMETIC_OFF_T_H
23682#define RBIMPL_ARITHMETIC_PID_T_H
23683#define RBIMPL_ARITHMETIC_SHORT_H
23684#define RB_NUM2SHORT rb_num2short_inline
23685#define RB_NUM2USHORT rb_num2ushort
23686#define NUM2SHORT RB_NUM2SHORT
23687#define NUM2USHORT RB_NUM2USHORT
23688#define USHORT2NUM RB_INT2FIX
23689#define RB_FIX2SHORT rb_fix2short
23690#define FIX2SHORT RB_FIX2SHORT
23691#pragma GCC visibility push(default)
23692#pragma GCC visibility pop
23693#define RBIMPL_ARITHMETIC_SIZE_T_H
23694#define RB_SIZE2NUM RB_ULL2NUM
23695#define RB_SSIZE2NUM RB_LL2NUM
23696#define RB_NUM2SIZE RB_NUM2ULL
23697#define RB_NUM2SSIZE RB_NUM2LL
23698#define NUM2SIZET RB_NUM2SIZE
23699#define SIZET2NUM RB_SIZE2NUM
23700#define NUM2SSIZET RB_NUM2SSIZE
23701#define SSIZET2NUM RB_SSIZE2NUM
23702#define RBIMPL_ARITHMERIC_ST_DATA_T_H
23703#define RUBY_ST_H 1
23704#pragma GCC visibility push(default)
23705#define ST_DATA_T_DEFINED
23706#define MAX_ST_INDEX_VAL (~(st_index_t) 0)
23707#define SIZEOF_ST_INDEX_T SIZEOF_VOIDP
23708#define ST_INDEX_BITS (SIZEOF_ST_INDEX_T * CHAR_BIT)
23709#define ST_DATA_COMPATIBLE_P(type) __builtin_choose_expr(__builtin_types_compatible_p(type, st_data_t), 1, 0)
23710#define st_is_member(table,key) st_lookup((table),(key),(st_data_t *)0)
23711#define st_init_table rb_st_init_table
23712#define st_init_table_with_size rb_st_init_table_with_size
23713#define st_init_numtable rb_st_init_numtable
23714#define st_init_numtable_with_size rb_st_init_numtable_with_size
23715#define st_init_strtable rb_st_init_strtable
23716#define st_init_strtable_with_size rb_st_init_strtable_with_size
23717#define st_init_strcasetable rb_st_init_strcasetable
23718#define st_init_strcasetable_with_size rb_st_init_strcasetable_with_size
23719#define st_delete rb_st_delete
23720#define st_delete_safe rb_st_delete_safe
23721#define st_shift rb_st_shift
23722#define st_insert rb_st_insert
23723#define st_insert2 rb_st_insert2
23724#define st_lookup rb_st_lookup
23725#define st_get_key rb_st_get_key
23726#define st_update rb_st_update
23727#define st_foreach_with_replace rb_st_foreach_with_replace
23728#define st_foreach rb_st_foreach
23729#define st_foreach_check rb_st_foreach_check
23730#define st_keys rb_st_keys
23731#define st_keys_check rb_st_keys_check
23732#define st_values rb_st_values
23733#define st_values_check rb_st_values_check
23734#define st_add_direct rb_st_add_direct
23735#define st_free_table rb_st_free_table
23736#define st_cleanup_safe rb_st_cleanup_safe
23737#define st_clear rb_st_clear
23738#define st_copy rb_st_copy
23739#define st_numcmp rb_st_numcmp
23740#define st_numhash rb_st_numhash
23741#define st_locale_insensitive_strcasecmp rb_st_locale_insensitive_strcasecmp
23742#define st_locale_insensitive_strncasecmp rb_st_locale_insensitive_strncasecmp
23743#define st_strcasecmp rb_st_locale_insensitive_strcasecmp
23744#define st_strncasecmp rb_st_locale_insensitive_strncasecmp
23745#define st_memsize rb_st_memsize
23746#define st_hash rb_st_hash
23747#define st_hash_uint32 rb_st_hash_uint32
23748#define st_hash_uint rb_st_hash_uint
23749#define st_hash_end rb_st_hash_end
23750#define st_hash_start(h) ((st_index_t)(h))
23751#pragma GCC visibility pop
23752#define ST2FIX RB_ST2FIX
23753#define RB_ST2FIX RB_ST2FIX
23754#define RBIMPL_ARITHMETIC_UID_T_H
23755#define RBIMPL_CORE_H
23756#define RBIMPL_RARRAY_H
23757#define RBIMPL_RGENGC_H
23758#undef USE_RGENGC
23759#define USE_RGENGC 1
23760#define USE_RINCGC 1
23761#define USE_RGENGC_LOGGING_WB_UNPROTECT 0
23762#define RGENGC_WB_PROTECTED_ARRAY 1
23763#define RGENGC_WB_PROTECTED_HASH 1
23764#define RGENGC_WB_PROTECTED_STRUCT 1
23765#define RGENGC_WB_PROTECTED_STRING 1
23766#define RGENGC_WB_PROTECTED_OBJECT 1
23767#define RGENGC_WB_PROTECTED_REGEXP 1
23768#define RGENGC_WB_PROTECTED_CLASS 1
23769#define RGENGC_WB_PROTECTED_FLOAT 1
23770#define RGENGC_WB_PROTECTED_COMPLEX 1
23771#define RGENGC_WB_PROTECTED_RATIONAL 1
23772#define RGENGC_WB_PROTECTED_BIGNUM 1
23773#define RGENGC_WB_PROTECTED_NODE_CREF 1
23774#define RB_OBJ_WRITE(old,slot,young) RBIMPL_CAST(rb_obj_write((VALUE)(old), (VALUE *)(slot), (VALUE)(young), __FILE__, __LINE__))
23775#define RB_OBJ_WRITTEN(old,oldv,young) RBIMPL_CAST(rb_obj_written((VALUE)(old), (VALUE)(oldv), (VALUE)(young), __FILE__, __LINE__))
23776#define OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
23777#define OBJ_PROMOTED RB_OBJ_PROMOTED
23778#define OBJ_WB_UNPROTECT RB_OBJ_WB_UNPROTECT
23779#define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
23780#define RB_OBJ_WB_UNPROTECT_FOR(type,obj) (RGENGC_WB_PROTECTED_ ##type ? OBJ_WB_UNPROTECT(obj) : obj)
23781#define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging
23782#define RB_OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
23783#define RB_OBJ_PROMOTED RB_OBJ_PROMOTED
23784#pragma GCC visibility push(default)
23785#pragma GCC visibility pop
23786#define USE_TRANSIENT_HEAP 1
23787#define RARRAY(obj) RBIMPL_CAST((struct RArray *)(obj))
23788#define RARRAY_EMBED_FLAG RARRAY_EMBED_FLAG
23789#define RARRAY_EMBED_LEN_MASK RARRAY_EMBED_LEN_MASK
23790#define RARRAY_EMBED_LEN_MAX RARRAY_EMBED_LEN_MAX
23791#define RARRAY_EMBED_LEN_SHIFT RARRAY_EMBED_LEN_SHIFT
23792#define RARRAY_TRANSIENT_FLAG RARRAY_TRANSIENT_FLAG
23793#define RARRAY_LEN rb_array_len
23794#define RARRAY_CONST_PTR rb_array_const_ptr
23795#define RARRAY_CONST_PTR_TRANSIENT rb_array_const_ptr_transient
23796#define FIX_CONST_VALUE_PTR(x) (x)
23797#define RARRAY_EMBED_LEN RARRAY_EMBED_LEN
23798#define RARRAY_LENINT RARRAY_LENINT
23799#define RARRAY_TRANSIENT_P RARRAY_TRANSIENT_P
23800#define RARRAY_ASET RARRAY_ASET
23801#define RARRAY_PTR RARRAY_PTR
23802#pragma GCC visibility push(default)
23803#pragma GCC visibility pop
23804#define RBIMPL_RARRAY_STMT(flag,ary,var,expr) do { RBIMPL_ASSERT_TYPE((ary), RUBY_T_ARRAY); const VALUE rbimpl_ary = (ary); VALUE *var = rb_array_ptr_use_start(rbimpl_ary, (flag)); expr; rb_array_ptr_use_end(rbimpl_ary, (flag)); } while (0)
23805#define RARRAY_PTR_USE_START(a) rb_array_ptr_use_start(a, 0)
23806#define RARRAY_PTR_USE_END(a) rb_array_ptr_use_end(a, 0)
23807#define RARRAY_PTR_USE(ary,ptr_name,expr) RBIMPL_RARRAY_STMT(0, ary, ptr_name, expr)
23808#define RARRAY_PTR_USE_START_TRANSIENT(a) rb_array_ptr_use_start(a, 1)
23809#define RARRAY_PTR_USE_END_TRANSIENT(a) rb_array_ptr_use_end(a, 1)
23810#define RARRAY_PTR_USE_TRANSIENT(ary,ptr_name,expr) RBIMPL_RARRAY_STMT(1, ary, ptr_name, expr)
23811#define RARRAY_AREF(a,i) RARRAY_CONST_PTR_TRANSIENT(a)[i]
23812#define RBIMPL_RBIGNUM_H
23813#define RBIGNUM_SIGN rb_big_sign
23814#define RBIGNUM_POSITIVE_P RBIGNUM_POSITIVE_P
23815#define RBIGNUM_NEGATIVE_P RBIGNUM_NEGATIVE_P
23816#pragma GCC visibility push(default)
23817#pragma GCC visibility pop
23818#define RBIMPL_RCLASS_H
23819#define RMODULE_IS_OVERLAID RMODULE_IS_OVERLAID
23820#define RMODULE_IS_REFINEMENT RMODULE_IS_REFINEMENT
23821#define RMODULE_INCLUDED_INTO_REFINEMENT RMODULE_INCLUDED_INTO_REFINEMENT
23822#define RCLASS(obj) RBIMPL_CAST((struct RClass *)(obj))
23823#define RMODULE RCLASS
23824#define RCLASS_SUPER rb_class_get_superclass
23825#pragma GCC visibility push(default)
23826#pragma GCC visibility pop
23827#define RBIMPL_RDATA_H
23828#define RUBY_UNTYPED_DATA_WARNING 1
23829#define RBIMPL_DATA_FUNC(f) RBIMPL_CAST((void (*)(void *))(f))
23830#define RBIMPL_ATTRSET_UNTYPED_DATA_FUNC() RBIMPL_ATTR_WARNING(("untyped Data is unsafe; use TypedData instead")) RBIMPL_ATTR_DEPRECATED(("by TypedData"))
23831#define RBIMPL_MACRO_SELECT(x,y) x ## y
23832#define RUBY_MACRO_SELECT(x,y) RBIMPL_MACRO_SELECT(x, y)
23833#define RDATA(obj) RBIMPL_CAST((struct RData *)(obj))
23834#define DATA_PTR(obj) RDATA(obj)->data
23835#define RUBY_DEFAULT_FREE RBIMPL_DATA_FUNC(-1)
23836#define RUBY_NEVER_FREE RBIMPL_DATA_FUNC(0)
23837#define RUBY_UNTYPED_DATA_FUNC(f) f RBIMPL_ATTRSET_UNTYPED_DATA_FUNC()
23838#pragma GCC visibility push(default)
23839#pragma GCC visibility pop
23840#define Data_Wrap_Struct(klass,mark,free,sval) rb_data_object_wrap( (klass), (sval), RBIMPL_DATA_FUNC(mark), RBIMPL_DATA_FUNC(free))
23841#define Data_Make_Struct0(result,klass,type,size,mark,free,sval) VALUE result = rb_data_object_zalloc( (klass), (size), RBIMPL_DATA_FUNC(mark), RBIMPL_DATA_FUNC(free)); (sval) = RBIMPL_CAST((type *)DATA_PTR(result)); RBIMPL_CAST( (void)(sval))
23842#define Data_Make_Struct(klass,type,mark,free,sval) RB_GNUC_EXTENSION({ Data_Make_Struct0( data_struct_obj, klass, type, sizeof(type), mark, free, sval); data_struct_obj; })
23843#define Data_Get_Struct(obj,type,sval) ((sval) = RBIMPL_CAST((type*)rb_data_object_get(obj)))
23844#define rb_data_object_wrap_warning(klass,ptr,mark,free) RB_GNUC_EXTENSION( __builtin_choose_expr( __builtin_constant_p(klass) && !(klass), rb_data_object_wrap(klass, ptr, mark, free), (rb_data_object_wrap_warning)(klass, ptr, mark, free)))
23845#define rb_cData rb_cData()
23846#define rb_data_object_wrap_0 rb_data_object_wrap
23847#define rb_data_object_wrap_1 rb_data_object_wrap_warning
23848#define rb_data_object_wrap_2 rb_data_object_wrap_
23849#define rb_data_object_wrap RUBY_MACRO_SELECT(rb_data_object_wrap_2, RUBY_UNTYPED_DATA_WARNING)
23850#define rb_data_object_get_0 rb_data_object_get
23851#define rb_data_object_get_1 rb_data_object_get_warning
23852#define rb_data_object_get_2 rb_data_object_get_
23853#define rb_data_object_get RUBY_MACRO_SELECT(rb_data_object_get_2, RUBY_UNTYPED_DATA_WARNING)
23854#define rb_data_object_make_0 rb_data_object_make
23855#define rb_data_object_make_1 rb_data_object_make_warning
23856#define rb_data_object_make_2 rb_data_object_make_
23857#define rb_data_object_make RUBY_MACRO_SELECT(rb_data_object_make_2, RUBY_UNTYPED_DATA_WARNING)
23858#define RBIMPL_RFILE_H
23859#define RFILE(obj) RBIMPL_CAST((struct RFile *)(obj))
23860#define RBIMPL_RHASH_H
23861#define RHASH_TBL(h) rb_hash_tbl(h, __FILE__, __LINE__)
23862#define RHASH_ITER_LEV(h) rb_hash_iter_lev(h)
23863#define RHASH_IFNONE(h) rb_hash_ifnone(h)
23864#define RHASH_SIZE(h) rb_hash_size_num(h)
23865#define RHASH_EMPTY_P(h) (RHASH_SIZE(h) == 0)
23866#define RHASH_SET_IFNONE(h,ifnone) rb_hash_set_ifnone((VALUE)h, ifnone)
23867#pragma GCC visibility push(default)
23868#pragma GCC visibility pop
23869#define RBIMPL_ROBJECT_H
23870#define ROBJECT(obj) RBIMPL_CAST((struct RObject *)(obj))
23871#define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAX
23872#define ROBJECT_EMBED ROBJECT_EMBED
23873#define ROBJECT_NUMIV ROBJECT_NUMIV
23874#define ROBJECT_IVPTR ROBJECT_IVPTR
23875#define ROBJECT_IV_INDEX_TBL ROBJECT_IV_INDEX_TBL
23876#define RBIMPL_RREGEXP_H
23877#define RREGEXP(obj) RBIMPL_CAST((struct RRegexp *)(obj))
23878#define RREGEXP_PTR(obj) (RREGEXP(obj)->ptr)
23879#define RREGEXP_SRC RREGEXP_SRC
23880#define RREGEXP_SRC_PTR RREGEXP_SRC_PTR
23881#define RREGEXP_SRC_LEN RREGEXP_SRC_LEN
23882#define RREGEXP_SRC_END RREGEXP_SRC_END
23883#define RBIMPL_RSTRUCT_H
23884#define RSTRUCT_PTR(st) rb_struct_ptr(st)
23885#define RSTRUCT_LEN RSTRUCT_LEN
23886#define RSTRUCT_SET RSTRUCT_SET
23887#define RSTRUCT_GET RSTRUCT_GET
23888#pragma GCC visibility push(default)
23889#pragma GCC visibility pop
23890#define RBIMPL_RTYPEDDATA_H
23891#define HAVE_TYPE_RB_DATA_TYPE_T 1
23892#define HAVE_RB_DATA_TYPE_T_FUNCTION 1
23893#define HAVE_RB_DATA_TYPE_T_PARENT 1
23894#define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE
23895#define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE
23896#define RTYPEDDATA(obj) RBIMPL_CAST((struct RTypedData *)(obj))
23897#define RTYPEDDATA_DATA(v) (RTYPEDDATA(v)->data)
23898#define Check_TypedStruct(v,t) rb_check_typeddata(RBIMPL_CAST((VALUE)(v)), (t))
23899#define RTYPEDDATA_P RTYPEDDATA_P
23900#define RTYPEDDATA_TYPE RTYPEDDATA_TYPE
23901#define RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY
23902#define RUBY_TYPED_FROZEN_SHAREABLE RUBY_TYPED_FROZEN_SHAREABLE
23903#define RUBY_TYPED_WB_PROTECTED RUBY_TYPED_WB_PROTECTED
23904#define RUBY_TYPED_PROMOTED1 RUBY_TYPED_PROMOTED1
23905#pragma GCC visibility push(default)
23906#pragma GCC visibility pop
23907#define TypedData_Wrap_Struct(klass,data_type,sval) rb_data_typed_object_wrap((klass),(sval),(data_type))
23908#define TypedData_Make_Struct0(result,klass,type,size,data_type,sval) VALUE result = rb_data_typed_object_zalloc(klass, size, data_type); (sval) = RBIMPL_CAST((type *)RTYPEDDATA_DATA(result)); RBIMPL_CAST( (void)(sval))
23909#define TypedData_Make_Struct(klass,type,data_type,sval) RB_GNUC_EXTENSION({ TypedData_Make_Struct0( data_struct_obj, klass, type, sizeof(type), data_type, sval); data_struct_obj; })
23910#define TypedData_Get_Struct(obj,type,data_type,sval) ((sval) = RBIMPL_CAST((type *)rb_check_typeddata((obj), (data_type))))
23911#define RBIMPL_CTYPE_H
23912#define _CTYPE_H 1
23913#define _ISbit(bit) ((bit) < 8 ? ((1 << (bit)) << 8) : ((1 << (bit)) >> 8))
23914#define __isctype(c,type) ((*__ctype_b_loc ())[(int) (c)] & (unsigned short int) type)
23915#define __isascii(c) (((c) & ~0x7f) == 0)
23916#define __toascii(c) ((c) & 0x7f)
23917#define __exctype(name) extern int name (int) __THROW
23918#define __tobody(c,f,a,args) (__extension__ ({ int __res; if (sizeof (c) > 1) { if (__builtin_constant_p (c)) { int __c = (c); __res = __c < -128 || __c > 255 ? __c : (a)[__c]; } else __res = f args; } else __res = (a)[(int) (c)]; __res; }))
23919#define isalnum(c) __isctype((c), _ISalnum)
23920#define isalpha(c) __isctype((c), _ISalpha)
23921#define iscntrl(c) __isctype((c), _IScntrl)
23922#define isdigit(c) __isctype((c), _ISdigit)
23923#define islower(c) __isctype((c), _ISlower)
23924#define isgraph(c) __isctype((c), _ISgraph)
23925#define isprint(c) __isctype((c), _ISprint)
23926#define ispunct(c) __isctype((c), _ISpunct)
23927#define isspace(c) __isctype((c), _ISspace)
23928#define isupper(c) __isctype((c), _ISupper)
23929#define isxdigit(c) __isctype((c), _ISxdigit)
23930#define isblank(c) __isctype((c), _ISblank)
23931#define tolower(c) __tobody (c, tolower, *__ctype_tolower_loc (), (c))
23932#define toupper(c) __tobody (c, toupper, *__ctype_toupper_loc (), (c))
23933#define isascii(c) __isascii (c)
23934#define toascii(c) __toascii (c)
23935#define _tolower(c) ((int) (*__ctype_tolower_loc ())[(int) (c)])
23936#define _toupper(c) ((int) (*__ctype_toupper_loc ())[(int) (c)])
23937#define __isctype_l(c,type,locale) ((locale)->__ctype_b[(int) (c)] & (unsigned short int) type)
23938#define __exctype_l(name) extern int name (int, locale_t) __THROW
23939#define __tolower_l(c,locale) __tobody (c, __tolower_l, (locale)->__ctype_tolower, (c, locale))
23940#define __toupper_l(c,locale) __tobody (c, __toupper_l, (locale)->__ctype_toupper, (c, locale))
23941#define tolower_l(c,locale) __tolower_l ((c), (locale))
23942#define toupper_l(c,locale) __toupper_l ((c), (locale))
23943#define __isalnum_l(c,l) __isctype_l((c), _ISalnum, (l))
23944#define __isalpha_l(c,l) __isctype_l((c), _ISalpha, (l))
23945#define __iscntrl_l(c,l) __isctype_l((c), _IScntrl, (l))
23946#define __isdigit_l(c,l) __isctype_l((c), _ISdigit, (l))
23947#define __islower_l(c,l) __isctype_l((c), _ISlower, (l))
23948#define __isgraph_l(c,l) __isctype_l((c), _ISgraph, (l))
23949#define __isprint_l(c,l) __isctype_l((c), _ISprint, (l))
23950#define __ispunct_l(c,l) __isctype_l((c), _ISpunct, (l))
23951#define __isspace_l(c,l) __isctype_l((c), _ISspace, (l))
23952#define __isupper_l(c,l) __isctype_l((c), _ISupper, (l))
23953#define __isxdigit_l(c,l) __isctype_l((c), _ISxdigit, (l))
23954#define __isblank_l(c,l) __isctype_l((c), _ISblank, (l))
23955#define __isascii_l(c,l) ((l), __isascii (c))
23956#define __toascii_l(c,l) ((l), __toascii (c))
23957#define isalnum_l(c,l) __isalnum_l ((c), (l))
23958#define isalpha_l(c,l) __isalpha_l ((c), (l))
23959#define iscntrl_l(c,l) __iscntrl_l ((c), (l))
23960#define isdigit_l(c,l) __isdigit_l ((c), (l))
23961#define islower_l(c,l) __islower_l ((c), (l))
23962#define isgraph_l(c,l) __isgraph_l ((c), (l))
23963#define isprint_l(c,l) __isprint_l ((c), (l))
23964#define ispunct_l(c,l) __ispunct_l ((c), (l))
23965#define isspace_l(c,l) __isspace_l ((c), (l))
23966#define isupper_l(c,l) __isupper_l ((c), (l))
23967#define isxdigit_l(c,l) __isxdigit_l ((c), (l))
23968#define isblank_l(c,l) __isblank_l ((c), (l))
23969#define isascii_l(c,l) __isascii_l ((c), (l))
23970#define toascii_l(c,l) __toascii_l ((c), (l))
23971#define ISASCII rb_isascii
23972#define ISPRINT rb_isprint
23973#define ISGRAPH rb_isgraph
23974#define ISSPACE rb_isspace
23975#define ISUPPER rb_isupper
23976#define ISLOWER rb_islower
23977#define ISALNUM rb_isalnum
23978#define ISALPHA rb_isalpha
23979#define ISDIGIT rb_isdigit
23980#define ISXDIGIT rb_isxdigit
23981#define ISBLANK rb_isblank
23982#define ISCNTRL rb_iscntrl
23983#define ISPUNCT rb_ispunct
23984#define TOUPPER rb_toupper
23985#define TOLOWER rb_tolower
23986#define STRCASECMP st_locale_insensitive_strcasecmp
23987#define STRNCASECMP st_locale_insensitive_strncasecmp
23988#define STRTOUL ruby_strtoul
23989#pragma GCC visibility push(default)
23990#pragma GCC visibility pop
23991#define RBIMPL_EVAL_H
23992#pragma GCC visibility push(default)
23993#define rb_funcall2 rb_funcallv
23994#define rb_funcall3 rb_funcallv_public
23995#pragma GCC visibility pop
23996#define RBIMPL_EVENT_H
23997#define RUBY_EVENT_NONE 0x0000
23998#define RUBY_EVENT_LINE 0x0001
23999#define RUBY_EVENT_CLASS 0x0002
24000#define RUBY_EVENT_END 0x0004
24001#define RUBY_EVENT_CALL 0x0008
24002#define RUBY_EVENT_RETURN 0x0010
24003#define RUBY_EVENT_C_CALL 0x0020
24004#define RUBY_EVENT_C_RETURN 0x0040
24005#define RUBY_EVENT_RAISE 0x0080
24006#define RUBY_EVENT_ALL 0x00ff
24007#define RUBY_EVENT_B_CALL 0x0100
24008#define RUBY_EVENT_B_RETURN 0x0200
24009#define RUBY_EVENT_THREAD_BEGIN 0x0400
24010#define RUBY_EVENT_THREAD_END 0x0800
24011#define RUBY_EVENT_FIBER_SWITCH 0x1000
24012#define RUBY_EVENT_SCRIPT_COMPILED 0x2000
24013#define RUBY_EVENT_TRACEPOINT_ALL 0xffff
24014#define RUBY_EVENT_RESERVED_FOR_INTERNAL_USE 0x030000
24015#define RUBY_INTERNAL_EVENT_SWITCH 0x040000
24016#define RUBY_EVENT_SWITCH 0x040000
24017#define RUBY_INTERNAL_EVENT_NEWOBJ 0x100000
24018#define RUBY_INTERNAL_EVENT_FREEOBJ 0x200000
24019#define RUBY_INTERNAL_EVENT_GC_START 0x400000
24020#define RUBY_INTERNAL_EVENT_GC_END_MARK 0x800000
24021#define RUBY_INTERNAL_EVENT_GC_END_SWEEP 0x1000000
24022#define RUBY_INTERNAL_EVENT_GC_ENTER 0x2000000
24023#define RUBY_INTERNAL_EVENT_GC_EXIT 0x4000000
24024#define RUBY_INTERNAL_EVENT_OBJSPACE_MASK 0x7f00000
24025#define RUBY_INTERNAL_EVENT_MASK 0xffff0000
24026#define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1
24027#pragma GCC visibility push(default)
24028#pragma GCC visibility pop
24029#define RBIMPL_GC_H
24030#pragma GCC visibility push(default)
24031#pragma GCC visibility pop
24032#define RBIMPL_GLOB_H
24033#pragma GCC visibility push(default)
24034#pragma GCC visibility pop
24035#define RBIMPL_GLOBALS_H
24036#pragma GCC visibility push(default)
24037#define RUBY_INTEGER_UNIFICATION 1
24038#define CLASS_OF rb_class_of
24039#pragma GCC visibility pop
24040#define RBIMPL_INTERPRETER_H
24041#pragma GCC visibility push(default)
24042#define RUBY_INIT_STACK VALUE variable_in_this_stack_frame; ruby_init_stack(&variable_in_this_stack_frame);
24043#pragma GCC visibility pop
24044#define RBIMPL_ITERATOR_H
24045#pragma GCC visibility push(default)
24046#define RB_BLOCK_CALL_FUNC_STRICT 1
24047#define RUBY_BLOCK_CALL_FUNC_TAKES_BLOCKARG 1
24048#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg,callback_arg) VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg
24049#pragma GCC visibility pop
24050#define RBIMPL_MEMORY_H
24051#define DSIZE_T uint128_t
24052#define RUBY_ALLOCV_LIMIT 1024
24053#define RB_GC_GUARD(v) (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(v); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }))
24054#define RB_ALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xmalloc2((n), sizeof(type)))
24055#define RB_ALLOC(type) RBIMPL_CAST((type *)ruby_xmalloc(sizeof(type)))
24056#define RB_ZALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xcalloc((n), sizeof(type)))
24057#define RB_ZALLOC(type) (RB_ZALLOC_N(type, 1))
24058#define RB_REALLOC_N(var,type,n) ((var) = RBIMPL_CAST((type *)ruby_xrealloc2((void *)(var), (n), sizeof(type))))
24059#define ALLOCA_N(type,n) RBIMPL_CAST((type *)alloca(rbimpl_size_mul_or_raise(sizeof(type), (n))))
24060#define RB_ALLOCV(v,n) ((n) < RUBY_ALLOCV_LIMIT ? ((v) = 0, alloca(n)) : rb_alloc_tmp_buffer(&(v), (n)))
24061#define RB_ALLOCV_N(type,v,n) RBIMPL_CAST((type *) (((size_t)(n) < RUBY_ALLOCV_LIMIT / sizeof(type)) ? ((v) = 0, alloca((n) * sizeof(type))) : rb_alloc_tmp_buffer2(&(v), (n), sizeof(type))))
24062#define RB_ALLOCV_END(v) rb_free_tmp_buffer(&(v))
24063#define MEMZERO(p,type,n) memset((p), 0, rbimpl_size_mul_or_raise(sizeof(type), (n)))
24064#define MEMCPY(p1,p2,type,n) memcpy((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
24065#define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
24066#define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
24067#define ALLOC_N RB_ALLOC_N
24068#define ALLOC RB_ALLOC
24069#define ZALLOC_N RB_ZALLOC_N
24070#define ZALLOC RB_ZALLOC
24071#define REALLOC_N RB_REALLOC_N
24072#define ALLOCV RB_ALLOCV
24073#define ALLOCV_N RB_ALLOCV_N
24074#define ALLOCV_END RB_ALLOCV_END
24075#pragma GCC visibility push(default)
24076#pragma GCC visibility pop
24077#pragma GCC visibility push(default)
24078#pragma GCC visibility pop
24079#undef memcpy
24080#define memcpy ruby_nonempty_memcpy
24081#define RBIMPL_MODULE_H
24082#pragma GCC visibility push(default)
24083#pragma GCC visibility pop
24084#define RBIMPL_NEWOBJ_H
24085#define RB_NEWOBJ(obj,type) type *(obj) = RBIMPL_CAST((type *)rb_newobj())
24086#define RB_NEWOBJ_OF(obj,type,klass,flags) type *(obj) = RBIMPL_CAST((type *)rb_newobj_of(klass, flags))
24087#define NEWOBJ RB_NEWOBJ
24088#define NEWOBJ_OF RB_NEWOBJ_OF
24089#define OBJSETUP rb_obj_setup
24090#define CLONESETUP rb_clone_setup
24091#define DUPSETUP rb_dup_setup
24092#pragma GCC visibility push(default)
24093#pragma GCC visibility pop
24094#define RBIMPL_SCAN_ARGS_H
24095#define RBIMPL_ATTR_DIAGNOSE_IF_H
24096#define RBIMPL_ATTR_DIAGNOSE_IF(_,__,___)
24097#define RBIMPL_INTERN_ARRAY_H
24098#pragma GCC visibility push(default)
24099#define rb_ary_new2 rb_ary_new_capa
24100#define rb_ary_new3 rb_ary_new_from_args
24101#define rb_ary_new4 rb_ary_new_from_values
24102#pragma GCC visibility pop
24103#define RBIMPL_INTERN_ERROR_H
24104#define UNLIMITED_ARGUMENTS (-1)
24105#define rb_exc_new2 rb_exc_new_cstr
24106#define rb_exc_new3 rb_exc_new_str
24107#define rb_check_trusted rb_check_trusted
24108#define rb_check_trusted_inline rb_check_trusted
24109#define rb_check_arity rb_check_arity
24110#pragma GCC visibility push(default)
24111#pragma GCC visibility pop
24112#define rb_check_frozen_internal(obj) do { VALUE frozen_obj = (obj); if (RB_UNLIKELY(RB_OBJ_FROZEN(frozen_obj))) { rb_error_frozen_object(frozen_obj); } } while (0)
24113#define rb_check_frozen rb_check_frozen_inline
24114#define RBIMPL_INTERN_HASH_H
24115#pragma GCC visibility push(default)
24116#define st_foreach_safe rb_st_foreach_safe
24117#pragma GCC visibility pop
24118#define RBIMPL_INTERN_PROC_H
24119#pragma GCC visibility push(default)
24120#pragma GCC visibility pop
24121#define RB_SCAN_ARGS_PASS_CALLED_KEYWORDS 0
24122#define RB_SCAN_ARGS_KEYWORDS 1
24123#define RB_SCAN_ARGS_LAST_HASH_KEYWORDS 3
24124#define RB_NO_KEYWORDS 0
24125#define RB_PASS_KEYWORDS 1
24126#define RB_PASS_CALLED_KEYWORDS rb_keyword_given_p()
24127#define HAVE_RB_SCAN_ARGS_OPTIONAL_HASH 1
24128#pragma GCC visibility push(default)
24129#pragma GCC visibility pop
24130#define rb_scan_args_isdigit(c) (RBIMPL_CAST((unsigned char)((c)-'0'))<10)
24131#define rb_scan_args_count_end(fmt,ofs,vari) ((fmt)[ofs] ? -1 : (vari))
24132#define rb_scan_args_count_block(fmt,ofs,vari) ((fmt)[ofs]!='&' ? rb_scan_args_count_end(fmt, ofs, vari) : rb_scan_args_count_end(fmt, (ofs)+1, (vari)+1))
24133#define rb_scan_args_count_hash(fmt,ofs,vari) ((fmt)[ofs]!=':' ? rb_scan_args_count_block(fmt, ofs, vari) : rb_scan_args_count_block(fmt, (ofs)+1, (vari)+1))
24134#define rb_scan_args_count_trail(fmt,ofs,vari) (!rb_scan_args_isdigit((fmt)[ofs]) ? rb_scan_args_count_hash(fmt, ofs, vari) : rb_scan_args_count_hash(fmt, (ofs)+1, (vari)+((fmt)[ofs]-'0')))
24135#define rb_scan_args_count_var(fmt,ofs,vari) ((fmt)[ofs]!='*' ? rb_scan_args_count_trail(fmt, ofs, vari) : rb_scan_args_count_trail(fmt, (ofs)+1, (vari)+1))
24136#define rb_scan_args_count_opt(fmt,ofs,vari) (!rb_scan_args_isdigit((fmt)[ofs]) ? rb_scan_args_count_var(fmt, ofs, vari) : rb_scan_args_count_var(fmt, (ofs)+1, (vari)+(fmt)[ofs]-'0'))
24137#define rb_scan_args_count_lead(fmt,ofs,vari) (!rb_scan_args_isdigit((fmt)[ofs]) ? rb_scan_args_count_var(fmt, ofs, vari) : rb_scan_args_count_opt(fmt, (ofs)+1, (vari)+(fmt)[ofs]-'0'))
24138#define rb_scan_args_count(fmt) rb_scan_args_count_lead(fmt, 0, 0)
24139#define rb_scan_args_verify(fmt,varc) (sizeof(char[1-2*(rb_scan_args_count(fmt)<0)])!=1 ? rb_scan_args_bad_format(fmt) : sizeof(char[1-2*(rb_scan_args_count(fmt)!=(varc))])!=1 ? rb_scan_args_length_mismatch(fmt, varc) : RBIMPL_ASSERT_NOTHING)
24140#define rb_scan_args0(argc,argv,fmt,varc,vars) rb_scan_args_set(RB_SCAN_ARGS_PASS_CALLED_KEYWORDS, argc, argv, rb_scan_args_n_lead(fmt), rb_scan_args_n_opt(fmt), rb_scan_args_n_trail(fmt), rb_scan_args_f_var(fmt), rb_scan_args_f_hash(fmt), rb_scan_args_f_block(fmt), (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)
24141#define rb_scan_args_kw0(kw_flag,argc,argv,fmt,varc,vars) rb_scan_args_set(kw_flag, argc, argv, rb_scan_args_n_lead(fmt), rb_scan_args_n_opt(fmt), rb_scan_args_n_trail(fmt), rb_scan_args_f_var(fmt), rb_scan_args_f_hash(fmt), rb_scan_args_f_block(fmt), (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)
24142#define rb_scan_args_next_param() vars[vari++]
24143#undef rb_scan_args_next_param
24144#define rb_scan_args(argc,argvp,fmt,...) __builtin_choose_expr( __builtin_constant_p(fmt), rb_scan_args0( argc, argvp, fmt, (sizeof((VALUE*[]){__VA_ARGS__})/sizeof(VALUE*)), ((VALUE*[]){__VA_ARGS__})), (rb_scan_args)(argc, argvp, fmt __VA_OPT__(, __VA_ARGS__)))
24145#define rb_scan_args_kw(kw_flag,argc,argvp,fmt,...) __builtin_choose_expr( __builtin_constant_p(fmt), rb_scan_args_kw0( kw_flag, argc, argvp, fmt, (sizeof((VALUE*[]){__VA_ARGS__})/sizeof(VALUE*)), ((VALUE*[]){__VA_ARGS__})), (rb_scan_args_kw)(kw_flag, argc, argvp, fmt __VA_OPT__(, __VA_ARGS__)))
24146#define RBIMPL_SYMBOL_H
24147#define RB_ID2SYM rb_id2sym
24148#define RB_SYM2ID rb_sym2id
24149#define ID2SYM RB_ID2SYM
24150#define SYM2ID RB_SYM2ID
24151#define CONST_ID_CACHE RUBY_CONST_ID_CACHE
24152#define CONST_ID RUBY_CONST_ID
24153#define rb_intern_const rb_intern_const
24154#pragma GCC visibility push(default)
24155#pragma GCC visibility pop
24156#define RUBY_CONST_ID_CACHE(result,str) { static ID rb_intern_id_cache; rbimpl_intern_const(&rb_intern_id_cache, (str)); result rb_intern_id_cache; }
24157#define RUBY_CONST_ID(var,str) do { static ID rbimpl_id; (var) = rbimpl_intern_const(&rbimpl_id, (str)); } while (0)
24158#define rb_intern(str) (RBIMPL_CONSTANT_P(str) ? __extension__ ({ static ID rbimpl_id; rbimpl_intern_const(&rbimpl_id, (str)); }) : (rb_intern)(str))
24159#define RBIMPL_VARIABLE_H
24160#pragma GCC visibility push(default)
24161#pragma GCC visibility pop
24162#define RUBY_BACKWARD2_INTTYPES_H
24163#define PRI_INT_PREFIX ""
24164#define PRI_LONG_PREFIX "l"
24165#define PRI_SHORT_PREFIX "h"
24166#define PRI_64_PREFIX PRI_LONG_PREFIX
24167#define RUBY_PRI_VALUE_MARK "\v"
24168#define PRIdVALUE PRI_VALUE_PREFIX"d"
24169#define PRIoVALUE PRI_VALUE_PREFIX"o"
24170#define PRIuVALUE PRI_VALUE_PREFIX"u"
24171#define PRIxVALUE PRI_VALUE_PREFIX"x"
24172#define PRIXVALUE PRI_VALUE_PREFIX"X"
24173#define PRIsVALUE PRI_VALUE_PREFIX"i" RUBY_PRI_VALUE_MARK
24174#define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d"
24175#define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i"
24176#define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o"
24177#define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u"
24178#define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x"
24179#define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X"
24180#define PRIdSIZE PRI_SIZE_PREFIX"d"
24181#define PRIiSIZE PRI_SIZE_PREFIX"i"
24182#define PRIoSIZE PRI_SIZE_PREFIX"o"
24183#define PRIuSIZE PRI_SIZE_PREFIX"u"
24184#define PRIxSIZE PRI_SIZE_PREFIX"x"
24185#define PRIXSIZE PRI_SIZE_PREFIX"X"
24186#pragma GCC visibility push(default)
24187#define USE_SYMBOL_AS_METHOD_NAME 1
24188#define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v))
24189#define FilePathStringValue(v) ((v) = rb_get_path(v))
24190#define rb_varargs_argc_check_runtime(argc,vargc) (((argc) <= (vargc)) ? (argc) : (rb_fatal("argc(%d) exceeds actual arguments(%d)", argc, vargc), 0))
24191#define rb_varargs_argc_valid_p(argc,vargc) ((argc) == 0 ? (vargc) <= 1 : (argc) == (vargc))
24192#define rb_varargs_argc_check(argc,vargc) __builtin_choose_expr(__builtin_constant_p(argc), (rb_varargs_argc_valid_p(argc, vargc) ? (argc) : rb_varargs_bad_length(argc, vargc)), rb_varargs_argc_check_runtime(argc, vargc))
24193#define RUBY_INTERN_H 1
24194#define RBIMPL_INTERN_BIGNUM_H
24195#pragma GCC visibility push(default)
24196#define rb_big2int(x) rb_big2long(x)
24197#define rb_big2uint(x) rb_big2ulong(x)
24198#define INTEGER_PACK_MSWORD_FIRST 0x01
24199#define INTEGER_PACK_LSWORD_FIRST 0x02
24200#define INTEGER_PACK_MSBYTE_FIRST 0x10
24201#define INTEGER_PACK_LSBYTE_FIRST 0x20
24202#define INTEGER_PACK_NATIVE_BYTE_ORDER 0x40
24203#define INTEGER_PACK_2COMP 0x80
24204#define INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION 0x400
24205#define INTEGER_PACK_FORCE_BIGNUM 0x100
24206#define INTEGER_PACK_NEGATIVE 0x200
24207#define INTEGER_PACK_LITTLE_ENDIAN (INTEGER_PACK_LSWORD_FIRST | INTEGER_PACK_LSBYTE_FIRST)
24208#define INTEGER_PACK_BIG_ENDIAN (INTEGER_PACK_MSWORD_FIRST | INTEGER_PACK_MSBYTE_FIRST)
24209#pragma GCC visibility pop
24210#define RBIMPL_INTERN_COMPAR_H
24211#pragma GCC visibility push(default)
24212#pragma GCC visibility pop
24213#define RBIMPL_INTERN_COMPLEX_H
24214#pragma GCC visibility push(default)
24215#define rb_complex_raw1(x) rb_complex_raw((x), INT2FIX(0))
24216#define rb_complex_raw2(x,y) rb_complex_raw((x), (y))
24217#define rb_complex_new1(x) rb_complex_new((x), INT2FIX(0))
24218#define rb_complex_new2(x,y) rb_complex_new((x), (y))
24219#define rb_complex_add rb_complex_plus
24220#define rb_complex_sub rb_complex_minus
24221#define rb_complex_nagate rb_complex_uminus
24222#define rb_Complex1(x) rb_Complex((x), INT2FIX(0))
24223#define rb_Complex2(x,y) rb_Complex((x), (y))
24224#pragma GCC visibility pop
24225#define RBIMPL_INTERN_CONT_H
24226#pragma GCC visibility push(default)
24227#pragma GCC visibility pop
24228#define RBIMPL_INTERN_DIR_H
24229#pragma GCC visibility push(default)
24230#pragma GCC visibility pop
24231#define RBIMPL_INTERN_ENUM_H
24232#pragma GCC visibility push(default)
24233#pragma GCC visibility pop
24234#define RBIMPL_INTERN_ENUMERATOR_H
24235#define RBIMPL_INTERN_EVAL_H
24236#pragma GCC visibility push(default)
24237#pragma GCC visibility pop
24238#pragma GCC visibility push(default)
24239#pragma GCC visibility pop
24240#define SIZED_ENUMERATOR(obj,argc,argv,size_fn) rb_enumeratorize_with_size((obj), ID2SYM(rb_frame_this_func()), (argc), (argv), (size_fn))
24241#define SIZED_ENUMERATOR_KW(obj,argc,argv,size_fn,kw_splat) rb_enumeratorize_with_size_kw((obj), ID2SYM(rb_frame_this_func()), (argc), (argv), (size_fn), (kw_splat))
24242#define RETURN_SIZED_ENUMERATOR(obj,argc,argv,size_fn) do { if (!rb_block_given_p()) return SIZED_ENUMERATOR(obj, argc, argv, size_fn); } while (0)
24243#define RETURN_SIZED_ENUMERATOR_KW(obj,argc,argv,size_fn,kw_splat) do { if (!rb_block_given_p()) return SIZED_ENUMERATOR_KW(obj, argc, argv, size_fn, kw_splat); } while (0)
24244#define RETURN_ENUMERATOR(obj,argc,argv) RETURN_SIZED_ENUMERATOR(obj, argc, argv, 0)
24245#define RETURN_ENUMERATOR_KW(obj,argc,argv,kw_splat) RETURN_SIZED_ENUMERATOR_KW(obj, argc, argv, 0, kw_splat)
24246#define RBIMPL_INTERN_FILE_H
24247#pragma GCC visibility push(default)
24248#pragma GCC visibility pop
24249#define RBIMPL_INTERN_GC_H
24250#pragma GCC visibility push(default)
24251#pragma GCC visibility pop
24252#define RBIMPL_INTERN_IO_H
24253#pragma GCC visibility push(default)
24254#define rb_defout rb_stdout
24255#define RB_RESERVED_FD_P(fd) rb_reserved_fd_p(fd)
24256#pragma GCC visibility pop
24257#define RBIMPL_INTERN_LOAD_H
24258#pragma GCC visibility push(default)
24259#define RB_EXT_RACTOR_SAFE(f) rb_ext_ractor_safe(f)
24260#define HAVE_RB_EXT_RACTOR_SAFE 1
24261#pragma GCC visibility pop
24262#define RBIMPL_INTERN_MARSHAL_H
24263#pragma GCC visibility push(default)
24264#pragma GCC visibility pop
24265#define RBIMPL_INTERN_NUMERIC_H
24266#define RB_NUM_COERCE_FUNCS_NEED_OPID 1
24267#pragma GCC visibility push(default)
24268#pragma GCC visibility pop
24269#define RBIMPL_INTERN_OBJECT_H
24270#pragma GCC visibility push(default)
24271#define RB_OBJ_INIT_COPY(obj,orig) ((obj) != (orig) && (rb_obj_init_copy((obj), (orig)), 1))
24272#define OBJ_INIT_COPY(obj,orig) RB_OBJ_INIT_COPY(obj, orig)
24273#pragma GCC visibility pop
24274#define RBIMPL_INTERN_PARSE_H
24275#pragma GCC visibility push(default)
24276#pragma GCC visibility pop
24277#define RBIMPL_INTERN_PROCESS_H
24278#pragma GCC visibility push(default)
24279#pragma GCC visibility pop
24280#define RBIMPL_INTERN_RANDOM_H
24281#pragma GCC visibility push(default)
24282#pragma GCC visibility pop
24283#define RBIMPL_INTERN_RANGE_H
24284#pragma GCC visibility push(default)
24285#pragma GCC visibility pop
24286#define RBIMPL_INTERN_RATIONAL_H
24287#pragma GCC visibility push(default)
24288#define rb_rational_raw1(x) rb_rational_raw((x), INT2FIX(1))
24289#define rb_rational_raw2(x,y) rb_rational_raw((x), (y))
24290#define rb_rational_new1(x) rb_rational_new((x), INT2FIX(1))
24291#define rb_rational_new2(x,y) rb_rational_new((x), (y))
24292#define rb_Rational1(x) rb_Rational((x), INT2FIX(1))
24293#define rb_Rational2(x,y) rb_Rational((x), (y))
24294#pragma GCC visibility pop
24295#define RBIMPL_INTERN_RE_H
24296#pragma GCC visibility push(default)
24297#define rb_memcmp memcmp
24298#define HAVE_RB_REG_NEW_STR 1
24299#pragma GCC visibility pop
24300#define RBIMPL_INTERN_RUBY_H
24301#pragma GCC visibility push(default)
24302#define rb_argv rb_get_argv()
24303#pragma GCC visibility pop
24304#define RBIMPL_INTERN_SELECT_H
24305#define RBIMPL_INTERN_SELECT_LARGESIZE_H
24306#define rb_fd_ptr rb_fd_ptr
24307#define rb_fd_max rb_fd_max
24308#pragma GCC visibility push(default)
24309#pragma GCC visibility pop
24310#pragma GCC visibility push(default)
24311#pragma GCC visibility pop
24312#define RBIMPL_INTERN_SIGNAL_H
24313#pragma GCC visibility push(default)
24314#define posix_signal ruby_posix_signal
24315#pragma GCC visibility pop
24316#define RBIMPL_INTERN_SPRINTF_H
24317#pragma GCC visibility push(default)
24318#pragma GCC visibility pop
24319#define RBIMPL_INTERN_STRING_H
24320#pragma GCC visibility push(default)
24321#define rb_str_dup_frozen rb_str_new_frozen
24322#define rb_hash_uint32(h,i) st_hash_uint32((h), (i))
24323#define rb_hash_uint(h,i) st_hash_uint((h), (i))
24324#define rb_hash_end(h) st_hash_end(h)
24325#define rb_str_new(str,len) ((RBIMPL_CONSTANT_P(str) && RBIMPL_CONSTANT_P(len) ? rb_str_new_static : rb_str_new) ((str), (len)))
24326#define rb_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_new_cstr : rb_str_new_cstr) (str))
24327#define rb_usascii_str_new(str,len) ((RBIMPL_CONSTANT_P(str) && RBIMPL_CONSTANT_P(len) ? rb_usascii_str_new_static : rb_usascii_str_new) ((str), (len)))
24328#define rb_utf8_str_new(str,len) ((RBIMPL_CONSTANT_P(str) && RBIMPL_CONSTANT_P(len) ? rb_utf8_str_new_static : rb_utf8_str_new) ((str), (len)))
24329#define rb_tainted_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_tainted_str_new_cstr : rb_tainted_str_new_cstr) (str))
24330#define rb_usascii_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_usascii_str_new_cstr : rb_usascii_str_new_cstr) (str))
24331#define rb_utf8_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_utf8_str_new_cstr : rb_utf8_str_new_cstr) (str))
24332#define rb_external_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_external_str_new_cstr : rb_external_str_new_cstr) (str))
24333#define rb_locale_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_locale_str_new_cstr : rb_locale_str_new_cstr) (str))
24334#define rb_str_buf_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_buf_new_cstr : rb_str_buf_new_cstr) (str))
24335#define rb_str_cat_cstr(buf,str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((buf), (str)))
24336#define rb_exc_new_cstr(exc,str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_exc_new_cstr : rb_exc_new_cstr) ((exc), (str)))
24337#define rb_str_new2 rb_str_new_cstr
24338#define rb_str_new3 rb_str_new_shared
24339#define rb_str_new4 rb_str_new_frozen
24340#define rb_str_new5 rb_str_new_with_class
24341#define rb_tainted_str_new2 rb_tainted_str_new_cstr
24342#define rb_str_buf_new2 rb_str_buf_new_cstr
24343#define rb_usascii_str_new2 rb_usascii_str_new_cstr
24344#define rb_str_buf_cat rb_str_cat
24345#define rb_str_buf_cat2 rb_str_cat_cstr
24346#define rb_str_cat2 rb_str_cat_cstr
24347#define rb_strlen_lit(str) (sizeof(str "") - 1)
24348#define rb_str_new_lit(str) rb_str_new_static((str), rb_strlen_lit(str))
24349#define rb_usascii_str_new_lit(str) rb_usascii_str_new_static((str), rb_strlen_lit(str))
24350#define rb_utf8_str_new_lit(str) rb_utf8_str_new_static((str), rb_strlen_lit(str))
24351#define rb_enc_str_new_lit(str,enc) rb_enc_str_new_static((str), rb_strlen_lit(str), (enc))
24352#define rb_str_new_literal(str) rb_str_new_lit(str)
24353#define rb_usascii_str_new_literal(str) rb_usascii_str_new_lit(str)
24354#define rb_utf8_str_new_literal(str) rb_utf8_str_new_lit(str)
24355#define rb_enc_str_new_literal(str,enc) rb_enc_str_new_lit(str, enc)
24356#pragma GCC visibility pop
24357#define RBIMPL_INTERN_STRUCT_H
24358#pragma GCC visibility push(default)
24359#pragma GCC visibility pop
24360#define RBIMPL_INTERN_THREAD_H
24361#pragma GCC visibility push(default)
24362#define RUBY_UBF_IO RBIMPL_CAST((rb_unblock_function_t *)-1)
24363#define RUBY_UBF_PROCESS RBIMPL_CAST((rb_unblock_function_t *)-1)
24364#pragma GCC visibility pop
24365#define RBIMPL_INTERN_TIME_H
24366#pragma GCC visibility push(default)
24367#pragma GCC visibility pop
24368#define RBIMPL_INTERN_VARIABLE_H
24369#pragma GCC visibility push(default)
24370#pragma GCC visibility pop
24371#define RUBY_VM 1
24372#define HAVE_NATIVETHREAD
24373#define InitVM(ext) {void InitVM_ ##ext(void);InitVM_ ##ext();}
24374#define rb_yield_values(argc,...) __extension__({ const int rb_yield_values_argc = (argc); const VALUE rb_yield_values_args[] = {__VA_ARGS__}; const int rb_yield_values_nargs = (int)(sizeof(rb_yield_values_args) / sizeof(VALUE)); rb_yield_values2( rb_varargs_argc_check(rb_yield_values_argc, rb_yield_values_nargs), rb_yield_values_nargs ? rb_yield_values_args : NULL); })
24375#define rb_funcall(recv,mid,argc,...) __extension__({ const int rb_funcall_argc = (argc); const VALUE rb_funcall_args[] = {__VA_ARGS__}; const int rb_funcall_nargs = (int)(sizeof(rb_funcall_args) / sizeof(VALUE)); rb_funcallv(recv, mid, rb_varargs_argc_check(rb_funcall_argc, rb_funcall_nargs), rb_funcall_nargs ? rb_funcall_args : NULL); })
24376#define RUBY_SUBST_H 1
24377#undef snprintf
24378#undef vsnprintf
24379#define snprintf ruby_snprintf
24380#define vsnprintf ruby_vsnprintf
24381#pragma GCC visibility pop
24382#define RUBY_VM_CORE_H
24383#define N_OR_RUBY_DEBUG(n) (((n) > 0) ? (n) : RUBY_DEBUG)
24384#define VM_CHECK_MODE N_OR_RUBY_DEBUG(0)
24385#define VMDEBUG 0
24386#define _SIGNAL_H
24387#define _BITS_SIGNUM_GENERIC_H 1
24388#define SIG_ERR ((__sighandler_t) -1)
24389#define SIG_DFL ((__sighandler_t) 0)
24390#define SIG_IGN ((__sighandler_t) 1)
24391#define SIG_HOLD ((__sighandler_t) 2)
24392#define SIGINT 2
24393#define SIGILL 4
24394#define SIGABRT 6
24395#define SIGFPE 8
24396#define SIGSEGV 11
24397#define SIGTERM 15
24398#define SIGHUP 1
24399#define SIGQUIT 3
24400#define SIGTRAP 5
24401#define SIGKILL 9
24402#define SIGPIPE 13
24403#define SIGALRM 14
24404#define SIGIO SIGPOLL
24405#define SIGIOT SIGABRT
24406#define SIGCLD SIGCHLD
24407#define _BITS_SIGNUM_ARCH_H 1
24408#define SIGSTKFLT 16
24409#define SIGPWR 30
24410#define SIGBUS 7
24411#define SIGSYS 31
24412#define SIGURG 23
24413#define SIGSTOP 19
24414#define SIGTSTP 20
24415#define SIGCONT 18
24416#define SIGCHLD 17
24417#define SIGTTIN 21
24418#define SIGTTOU 22
24419#define SIGPOLL 29
24420#define SIGXFSZ 25
24421#define SIGXCPU 24
24422#define SIGVTALRM 26
24423#define SIGPROF 27
24424#define SIGUSR1 10
24425#define SIGUSR2 12
24426#define SIGWINCH 28
24427#define SIGIO SIGPOLL
24428#define SIGIOT SIGABRT
24429#define SIGCLD SIGCHLD
24430#define __SIGRTMIN 32
24431#define __SIGRTMAX 64
24432#define _NSIG (__SIGRTMAX + 1)
24433#define __sig_atomic_t_defined 1
24434#define __siginfo_t_defined 1
24435#define __WORDSIZE 64
24436#define __WORDSIZE_TIME64_COMPAT32 1
24437#define __SYSCALL_WORDSIZE 64
24438#define ____sigval_t_defined
24439#define __SI_MAX_SIZE 128
24440#define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4)
24441#define _BITS_SIGINFO_ARCH_H 1
24442#define __SI_ALIGNMENT
24443#define __SI_BAND_TYPE long int
24444#define __SI_CLOCK_T __clock_t
24445#define __SI_ERRNO_THEN_CODE 1
24446#define __SI_HAVE_SIGSYS 1
24447#define __SI_SIGFAULT_ADDL
24448#define si_pid _sifields._kill.si_pid
24449#define si_uid _sifields._kill.si_uid
24450#define si_timerid _sifields._timer.si_tid
24451#define si_overrun _sifields._timer.si_overrun
24452#define si_status _sifields._sigchld.si_status
24453#define si_utime _sifields._sigchld.si_utime
24454#define si_stime _sifields._sigchld.si_stime
24455#define si_value _sifields._rt.si_sigval
24456#define si_int _sifields._rt.si_sigval.sival_int
24457#define si_ptr _sifields._rt.si_sigval.sival_ptr
24458#define si_addr _sifields._sigfault.si_addr
24459#define si_addr_lsb _sifields._sigfault.si_addr_lsb
24460#define si_lower _sifields._sigfault._bounds._addr_bnd._lower
24461#define si_upper _sifields._sigfault._bounds._addr_bnd._upper
24462#define si_pkey _sifields._sigfault._bounds._pkey
24463#define si_band _sifields._sigpoll.si_band
24464#define si_fd _sifields._sigpoll.si_fd
24465#define si_call_addr _sifields._sigsys._call_addr
24466#define si_syscall _sifields._sigsys._syscall
24467#define si_arch _sifields._sigsys._arch
24468#define _BITS_SIGINFO_CONSTS_H 1
24469#define __SI_ASYNCIO_AFTER_SIGIO 1
24470#define SI_ASYNCNL SI_ASYNCNL
24471#define SI_DETHREAD SI_DETHREAD
24472#define SI_TKILL SI_TKILL
24473#define SI_SIGIO SI_SIGIO
24474#define SI_ASYNCIO SI_ASYNCIO
24475#define SI_MESGQ SI_MESGQ
24476#define SI_TIMER SI_TIMER
24477#define SI_ASYNCIO SI_ASYNCIO
24478#define SI_QUEUE SI_QUEUE
24479#define SI_USER SI_USER
24480#define SI_KERNEL SI_KERNEL
24481#define ILL_ILLOPC ILL_ILLOPC
24482#define ILL_ILLOPN ILL_ILLOPN
24483#define ILL_ILLADR ILL_ILLADR
24484#define ILL_ILLTRP ILL_ILLTRP
24485#define ILL_PRVOPC ILL_PRVOPC
24486#define ILL_PRVREG ILL_PRVREG
24487#define ILL_COPROC ILL_COPROC
24488#define ILL_BADSTK ILL_BADSTK
24489#define ILL_BADIADDR ILL_BADIADDR
24490#define FPE_INTDIV FPE_INTDIV
24491#define FPE_INTOVF FPE_INTOVF
24492#define FPE_FLTDIV FPE_FLTDIV
24493#define FPE_FLTOVF FPE_FLTOVF
24494#define FPE_FLTUND FPE_FLTUND
24495#define FPE_FLTRES FPE_FLTRES
24496#define FPE_FLTINV FPE_FLTINV
24497#define FPE_FLTSUB FPE_FLTSUB
24498#define FPE_FLTUNK FPE_FLTUNK
24499#define FPE_CONDTRAP FPE_CONDTRAP
24500#define SEGV_MAPERR SEGV_MAPERR
24501#define SEGV_ACCERR SEGV_ACCERR
24502#define SEGV_BNDERR SEGV_BNDERR
24503#define SEGV_PKUERR SEGV_PKUERR
24504#define SEGV_ACCADI SEGV_ACCADI
24505#define SEGV_ADIDERR SEGV_ADIDERR
24506#define SEGV_ADIPERR SEGV_ADIPERR
24507#define SEGV_MTEAERR SEGV_MTEAERR
24508#define SEGV_MTESERR SEGV_MTESERR
24509#define BUS_ADRALN BUS_ADRALN
24510#define BUS_ADRERR BUS_ADRERR
24511#define BUS_OBJERR BUS_OBJERR
24512#define BUS_MCEERR_AR BUS_MCEERR_AR
24513#define BUS_MCEERR_AO BUS_MCEERR_AO
24514#define TRAP_BRKPT TRAP_BRKPT
24515#define TRAP_TRACE TRAP_TRACE
24516#define TRAP_BRANCH TRAP_BRANCH
24517#define TRAP_HWBKPT TRAP_HWBKPT
24518#define TRAP_UNK TRAP_UNK
24519#define CLD_EXITED CLD_EXITED
24520#define CLD_KILLED CLD_KILLED
24521#define CLD_DUMPED CLD_DUMPED
24522#define CLD_TRAPPED CLD_TRAPPED
24523#define CLD_STOPPED CLD_STOPPED
24524#define CLD_CONTINUED CLD_CONTINUED
24525#define POLL_IN POLL_IN
24526#define POLL_OUT POLL_OUT
24527#define POLL_MSG POLL_MSG
24528#define POLL_ERR POLL_ERR
24529#define POLL_PRI POLL_PRI
24530#define POLL_HUP POLL_HUP
24531#define _BITS_SIGINFO_CONSTS_ARCH_H 1
24532#define __sigval_t_defined
24533#define __sigevent_t_defined 1
24534#define __WORDSIZE 64
24535#define __WORDSIZE_TIME64_COMPAT32 1
24536#define __SYSCALL_WORDSIZE 64
24537#define __SIGEV_MAX_SIZE 64
24538#define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
24539#define sigev_notify_function _sigev_un._sigev_thread._function
24540#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
24541#define _BITS_SIGEVENT_CONSTS_H 1
24542#define SIGEV_SIGNAL SIGEV_SIGNAL
24543#define SIGEV_NONE SIGEV_NONE
24544#define SIGEV_THREAD SIGEV_THREAD
24545#define SIGEV_THREAD_ID SIGEV_THREAD_ID
24546#define sigmask(sig) __glibc_macro_warning ("sigmask is deprecated") ((int)(1u << ((sig) - 1)))
24547#define NSIG _NSIG
24548#define _BITS_SIGACTION_H 1
24549#define sa_handler __sigaction_handler.sa_handler
24550#define sa_sigaction __sigaction_handler.sa_sigaction
24551#define SA_NOCLDSTOP 1
24552#define SA_NOCLDWAIT 2
24553#define SA_SIGINFO 4
24554#define SA_ONSTACK 0x08000000
24555#define SA_RESTART 0x10000000
24556#define SA_NODEFER 0x40000000
24557#define SA_RESETHAND 0x80000000
24558#define SA_INTERRUPT 0x20000000
24559#define SA_NOMASK SA_NODEFER
24560#define SA_ONESHOT SA_RESETHAND
24561#define SA_STACK SA_ONSTACK
24562#define SIG_BLOCK 0
24563#define SIG_UNBLOCK 1
24564#define SIG_SETMASK 2
24565#define _BITS_SIGCONTEXT_H 1
24566#define FP_XSTATE_MAGIC1 0x46505853U
24567#define FP_XSTATE_MAGIC2 0x46505845U
24568#define FP_XSTATE_MAGIC2_SIZE sizeof (FP_XSTATE_MAGIC2)
24569#define __need_size_t
24570#undef __need_ptrdiff_t
24571#undef __need_size_t
24572#undef __need_wchar_t
24573#undef NULL
24574#define NULL ((void *)0)
24575#undef __need_NULL
24576#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
24577#define __stack_t_defined 1
24578#define __need_size_t
24579#undef __need_ptrdiff_t
24580#undef __need_size_t
24581#undef __need_wchar_t
24582#undef NULL
24583#define NULL ((void *)0)
24584#undef __need_NULL
24585#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
24586#define _SYS_UCONTEXT_H 1
24587#define __ctx(fld) fld
24588#define __NGREG 23
24589#define NGREG __NGREG
24590#define REG_R8 REG_R8
24591#define REG_R9 REG_R9
24592#define REG_R10 REG_R10
24593#define REG_R11 REG_R11
24594#define REG_R12 REG_R12
24595#define REG_R13 REG_R13
24596#define REG_R14 REG_R14
24597#define REG_R15 REG_R15
24598#define REG_RDI REG_RDI
24599#define REG_RSI REG_RSI
24600#define REG_RBP REG_RBP
24601#define REG_RBX REG_RBX
24602#define REG_RDX REG_RDX
24603#define REG_RAX REG_RAX
24604#define REG_RCX REG_RCX
24605#define REG_RSP REG_RSP
24606#define REG_RIP REG_RIP
24607#define REG_EFL REG_EFL
24608#define REG_CSGSFS REG_CSGSFS
24609#define REG_ERR REG_ERR
24610#define REG_TRAPNO REG_TRAPNO
24611#define REG_OLDMASK REG_OLDMASK
24612#define REG_CR2 REG_CR2
24613#undef __ctx
24614#define _BITS_SIGSTACK_H 1
24615#define MINSIGSTKSZ 2048
24616#define SIGSTKSZ 8192
24617#define _BITS_SS_FLAGS_H 1
24618#define SS_ONSTACK SS_ONSTACK
24619#define SS_DISABLE SS_DISABLE
24620#define __sigstack_defined 1
24621#define _BITS_SIGTHREAD_H 1
24622#define SIGRTMIN (__libc_current_sigrtmin ())
24623#define SIGRTMAX (__libc_current_sigrtmax ())
24624#define RUBY_TOPLEVEL_ASSERT_H
24625#undef assert
24626#define assert RUBY_ASSERT_NDEBUG
24627#define VM_ASSERT(expr) ((void)0)
24628#define VM_UNREACHABLE(func) UNREACHABLE
24629#define _SETJMP_H 1
24630#define _BITS_SETJMP_H 1
24631#define __WORDSIZE 64
24632#define __WORDSIZE_TIME64_COMPAT32 1
24633#define __SYSCALL_WORDSIZE 64
24634#define __jmp_buf_tag_defined 1
24635#define setjmp(env) _setjmp (env)
24636#define sigsetjmp(env,savemask) __sigsetjmp (env, savemask)
24637#define CCAN_LIST_H
24638#undef _ASSERT_H
24639#undef assert
24640#undef __ASSERT_VOID_CAST
24641#undef assert_perror
24642#define _ASSERT_H 1
24643#define __ASSERT_VOID_CAST (void)
24644#define assert(expr) (__ASSERT_VOID_CAST (0))
24645#define assert_perror(errnum) (__ASSERT_VOID_CAST (0))
24646#undef static_assert
24647#define static_assert _Static_assert
24648#define CCAN_STR_H
24649#define stringify(expr) stringify_1(expr)
24650#define stringify_1(expr) #expr
24651#define CCAN_CONTAINER_OF_H
24652#define CCAN_CHECK_TYPE_H
24653#define check_type(expr,type) ((typeof(expr) *)0 != (type *)0)
24654#define check_types_match(expr1,expr2) ((typeof(expr1) *)0 != (typeof(expr2) *)0)
24655#define container_of(member_ptr,containing_type,member) ((containing_type *) ((char *)(member_ptr) - container_off(containing_type, member)) + check_types_match(*(member_ptr), ((containing_type *)0)->member))
24656#define container_of_or_null(member_ptr,containing_type,member) ((containing_type *) container_of_or_null_(member_ptr, container_off(containing_type, member)) + check_types_match(*(member_ptr), ((containing_type *)0)->member))
24657#define container_off(containing_type,member) offsetof(containing_type, member)
24658#define container_of_var(member_ptr,container_var,member) container_of(member_ptr, typeof(*container_var), member)
24659#define container_off_var(var,member) container_off(typeof(*var), member)
24660#define LIST_LOC __FILE__ ":" stringify(__LINE__)
24661#define list_debug(h,loc) ((void)loc, h)
24662#define list_debug_node(n,loc) ((void)loc, n)
24663#define LIST_HEAD_INIT(name) { { &(name).n, &(name).n } }
24664#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)
24665#define list_add_after(h,p,n) list_add_after_(h, p, n, LIST_LOC)
24666#define list_add(h,n) list_add_(h, n, LIST_LOC)
24667#define list_add_before(h,p,n) list_add_before_(h, p, n, LIST_LOC)
24668#define list_add_tail(h,n) list_add_tail_(h, n, LIST_LOC)
24669#define list_empty(h) list_empty_(h, LIST_LOC)
24670#define list_empty_nodebug(h) list_empty(h)
24671#define list_del(n) list_del_(n, LIST_LOC)
24672#define list_del_init(n) list_del_init_(n, LIST_LOC)
24673#define list_swap(o,n) list_swap_(o, n, LIST_LOC)
24674#define list_entry(n,type,member) container_of(n, type, member)
24675#define list_top(h,type,member) ((type *)list_top_((h), list_off_(type, member)))
24676#define list_pop(h,type,member) ((type *)list_pop_((h), list_off_(type, member)))
24677#define list_tail(h,type,member) ((type *)list_tail_((h), list_off_(type, member)))
24678#define list_for_each(h,i,member) list_for_each_off(h, i, list_off_var_(i, member))
24679#define list_for_each_rev(h,i,member) list_for_each_rev_off(h, i, list_off_var_(i, member))
24680#define list_for_each_rev_safe(h,i,nxt,member) list_for_each_rev_safe_off(h, i, nxt, list_off_var_(i, member))
24681#define list_for_each_safe(h,i,nxt,member) list_for_each_safe_off(h, i, nxt, list_off_var_(i, member))
24682#define list_next(h,i,member) ((list_typeof(i))list_entry_or_null(list_debug(h, __FILE__ ":" stringify(__LINE__)), (i)->member.next, list_off_var_((i), member)))
24683#define list_prev(h,i,member) ((list_typeof(i))list_entry_or_null(list_debug(h, __FILE__ ":" stringify(__LINE__)), (i)->member.prev, list_off_var_((i), member)))
24684#define list_append_list(t,f) list_append_list_(t, f, __FILE__ ":" stringify(__LINE__))
24685#define list_prepend_list(t,f) list_prepend_list_(t, f, LIST_LOC)
24686#define list_for_each_off_dir_(h,i,off,dir) for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, (off)); list_node_from_off_((void *)i, (off)) != &(h)->n; i = list_node_to_off_(list_node_from_off_((void *)i, (off))->dir, (off)))
24687#define list_for_each_safe_off_dir_(h,i,nxt,off,dir) for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, (off)), nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, (off)); list_node_from_off_(i, (off)) != &(h)->n; i = nxt, nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, (off)))
24688#define list_for_each_off(h,i,off) list_for_each_off_dir_((h),(i),(off),next)
24689#define list_for_each_rev_off(h,i,off) list_for_each_off_dir_((h),(i),(off),prev)
24690#define list_for_each_safe_off(h,i,nxt,off) list_for_each_safe_off_dir_((h),(i),(nxt),(off),next)
24691#define list_for_each_rev_safe_off(h,i,nxt,off) list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev)
24692#define list_entry_off(n,type,off) ((type *)list_node_from_off_((n), (off)))
24693#define list_head_off(h,type,off) ((type *)list_head_off((h), (off)))
24694#define list_tail_off(h,type,off) ((type *)list_tail_((h), (off)))
24695#define list_add_off(h,n,off) list_add((h), list_node_from_off_((n), (off)))
24696#define list_del_off(n,off) list_del(list_node_from_off_((n), (off)))
24697#define list_del_from_off(h,n,off) list_del_from(h, list_node_from_off_((n), (off)))
24698#define list_off_(type,member) (container_off(type, member) + check_type(((type *)0)->member, struct list_node))
24699#define list_off_var_(var,member) (container_off_var(var, member) + check_type(var->member, struct list_node))
24700#define list_typeof(var) typeof(var)
24701#define RUBY_ID_H
24702#define ID_STATIC_SYM RUBY_ID_STATIC_SYM
24703#define ID_SCOPE_SHIFT RUBY_ID_SCOPE_SHIFT
24704#define ID_SCOPE_MASK RUBY_ID_SCOPE_MASK
24705#define ID_LOCAL RUBY_ID_LOCAL
24706#define ID_INSTANCE RUBY_ID_INSTANCE
24707#define ID_GLOBAL RUBY_ID_GLOBAL
24708#define ID_ATTRSET RUBY_ID_ATTRSET
24709#define ID_CONST RUBY_ID_CONST
24710#define ID_CLASS RUBY_ID_CLASS
24711#define ID_JUNK RUBY_ID_JUNK
24712#define ID_INTERNAL RUBY_ID_INTERNAL
24713#define symIFUNC ID2SYM(idIFUNC)
24714#define symCFUNC ID2SYM(idCFUNC)
24715#define RUBY_TOKEN_DOT2 128
24716#define RUBY_TOKEN_DOT3 129
24717#define RUBY_TOKEN_BDOT2 130
24718#define RUBY_TOKEN_BDOT3 131
24719#define RUBY_TOKEN_UPLUS 132
24720#define RUBY_TOKEN_UMINUS 133
24721#define RUBY_TOKEN_POW 134
24722#define RUBY_TOKEN_CMP 135
24723#define RUBY_TOKEN_LSHFT 136
24724#define RUBY_TOKEN_RSHFT 137
24725#define RUBY_TOKEN_LEQ 138
24726#define RUBY_TOKEN_GEQ 139
24727#define RUBY_TOKEN_EQ 140
24728#define RUBY_TOKEN_EQQ 141
24729#define RUBY_TOKEN_NEQ 142
24730#define RUBY_TOKEN_MATCH 143
24731#define RUBY_TOKEN_NMATCH 144
24732#define RUBY_TOKEN_AREF 145
24733#define RUBY_TOKEN_ASET 146
24734#define RUBY_TOKEN_COLON2 147
24735#define RUBY_TOKEN_ANDOP 148
24736#define RUBY_TOKEN_OROP 149
24737#define RUBY_TOKEN_ANDDOT 150
24738#define RUBY_TOKEN(t) RUBY_TOKEN_ ##t
24739#define RUBY_TOKEN2ID_TYPE(tok,type) ((tok<<RUBY_ID_SCOPE_SHIFT)|type|RUBY_ID_STATIC_SYM)
24740#define TOKEN2LOCALID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_LOCAL)
24741#define TOKEN2INSTANCEID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_INSTANCE)
24742#define TOKEN2GLOBALID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_GLOBAL)
24743#define TOKEN2CONSTID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_CONST)
24744#define TOKEN2CLASSID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_CLASS)
24745#define TOKEN2ATTRSETID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_ATTRSET)
24746#define DEFINE_LOCALID_FROM_TOKEN(n) id ##n = TOKEN2LOCALID(t ##n)
24747#define DEFINE_INSTANCEID_FROM_TOKEN(n) id ##n = TOKEN2INSTANCEID(t ##n)
24748#define DEFINE_GLOBALID_FROM_TOKEN(n) id ##n = TOKEN2GLOBALID(t ##n)
24749#define DEFINE_CONSTID_FROM_TOKEN(n) id ##n = TOKEN2CONSTID(t ##n)
24750#define DEFINE_CLASSID_FROM_TOKEN(n) id ##n = TOKEN2CLASSID(t ##n)
24751#define DEFINE_ATTRSETID_FROM_TOKEN(n) id ##n = TOKEN2ATTRSETID(t ##n)
24752#define RUBY_INTERNAL_H 1
24753#define LIKELY(x) RB_LIKELY(x)
24754#define UNLIKELY(x) RB_UNLIKELY(x)
24755#define numberof(array) ((int)(sizeof(array) / sizeof((array)[0])))
24756#define roomof(x,y) (((x) + (y) - 1) / (y))
24757#define type_roomof(x,y) roomof(sizeof(x), sizeof(y))
24758#define ACCESS_ONCE(type,x) (*((volatile type *)&(x)))
24759#undef RARRAY_AREF
24760#undef RClass
24761#undef RCLASS_SUPER
24762#undef NEWOBJ_OF
24763#undef RB_NEWOBJ_OF
24764#undef RB_OBJ_WRITE
24765#undef RHASH_IFNONE
24766#undef RHASH_SIZE
24767#undef RHASH_TBL
24768#undef RHASH_EMPTY_P
24769#undef ROBJECT_IV_INDEX_TBL
24770#undef RSTRUCT_LEN
24771#undef RSTRUCT_PTR
24772#undef RSTRUCT_SET
24773#undef RSTRUCT_GET
24774#define rb_ary_new_from_args(...) rb_nonexistent_symbol(__VA_ARGS__)
24775#define rb_io_fptr_finalize(...) rb_nonexistent_symbol(__VA_ARGS__)
24776#define rb_fstring_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
24777#define rb_sym_intern_ascii_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
24778#define rb_funcallv(...) rb_nonexistent_symbol(__VA_ARGS__)
24779#define rb_method_basic_definition_p(...) rb_nonexistent_symbol(__VA_ARGS__)
24780#pragma GCC visibility push(default)
24781#pragma GCC visibility pop
24782#define rp(obj) rb_obj_info_dump_loc((VALUE)(obj), __FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING)
24783#define rp_m(msg,obj) do { fputs((msg), stderr); rb_obj_info_dump((VALUE)(obj)); } while (0)
24784#define bp() ruby_debug_breakpoint()
24785#define RBOOL(v) ((v) ? Qtrue : Qfalse)
24786#define RB_BIGNUM_TYPE_P(x) RB_TYPE_P((x), T_BIGNUM)
24787#define INTERNAL_ARRAY_H
24788#define INTERNAL_STATIC_ASSERT_H
24789#define STATIC_ASSERT RBIMPL_STATIC_ASSERT
24790#define ARRAY_DEBUG (0+RUBY_DEBUG)
24791#define RARRAY_PTR_IN_USE_FLAG FL_USER14
24792#pragma GCC visibility push(default)
24793#pragma GCC visibility pop
24794#undef rb_ary_new_from_args
24795#define rb_ary_new_from_args(n,...) __extension__ ({ const VALUE args_to_new_ary[] = {__VA_ARGS__}; if (__builtin_constant_p(n)) { STATIC_ASSERT(rb_ary_new_from_args, numberof(args_to_new_ary) == (n)); } rb_ary_new_from_values(numberof(args_to_new_ary), args_to_new_ary); })
24796#undef RARRAY_AREF
24797#define INTERNAL_SERIAL_H
24798#define SERIALT2NUM ULL2NUM
24799#define PRI_SERIALT_PREFIX PRI_LL_PREFIX
24800#define SIZEOF_SERIAL_T SIZEOF_LONG_LONG
24801#define INTERNAL_VM_H
24802#undef rb_funcallv
24803#undef rb_method_basic_definition_p
24804#pragma GCC visibility push(default)
24805#pragma GCC visibility pop
24806#pragma GCC visibility push(default)
24807#pragma GCC visibility pop
24808#pragma GCC visibility push(default)
24809#pragma GCC visibility pop
24810#pragma GCC visibility push(default)
24811#pragma GCC visibility pop
24812#define RUBY_DTRACE_CREATE_HOOK(name,arg) RUBY_DTRACE_HOOK(name ##_CREATE, arg)
24813#define RUBY_DTRACE_HOOK(name,arg) do { if (UNLIKELY(RUBY_DTRACE_ ##name ##_ENABLED())) { int dtrace_line; const char *dtrace_file = rb_source_location_cstr(&dtrace_line); if (!dtrace_file) dtrace_file = ""; RUBY_DTRACE_ ##name(arg, dtrace_file, dtrace_line); } } while (0)
24814#define RUBY_METHOD_H 1
24815#define INTERNAL_IMEMO_H
24816#define INTERNAL_GC_H
24817#define INTERNAL_COMPILERS_H
24818#define RUBY_BACKWARD2_GCC_VERSION_SINCE_H
24819#define GCC_VERSION_SINCE(x,y,z) RBIMPL_COMPILER_SINCE(GCC, (x), (y), (z))
24820#define GCC_VERSION_BEFORE(x,y,z) (RBIMPL_COMPILER_BEFORE(GCC, (x), (y), (z)) || (RBIMPL_COMPILER_IS(GCC) && ((RBIMPL_COMPILER_VERSION_MAJOR == (x)) && ((RBIMPL_COMPILER_VERSION_MINOR == (y)) && (RBIMPL_COMPILER_VERSION_PATCH == (z))))))
24821#define MSC_VERSION_SINCE(_) RBIMPL_COMPILER_SINCE(MSVC, (_) / 100, (_) % 100, 0)
24822#define MSC_VERSION_BEFORE(_) RBIMPL_COMPILER_BEFORE(MSVC, (_) / 100, (_) % 100, 0)
24823#define __has_declspec_attribute(...) RBIMPL_HAS_DECLSPEC_ATTRIBUTE(__VA_ARGS__)
24824#define __has_feature(...) RBIMPL_HAS_FEATURE(__VA_ARGS__)
24825#define __has_extension(...) RBIMPL_HAS_EXTENSION(__VA_ARGS__)
24826#define __has_warning(...) RBIMPL_HAS_WARNING(__VA_ARGS__)
24827#define RB_OBJ_BUILTIN_TYPE(obj) rb_obj_builtin_type(obj)
24828#define OBJ_BUILTIN_TYPE(obj) RB_OBJ_BUILTIN_TYPE(obj)
24829#define rb_obj_builtin_type(obj) __extension__({ VALUE arg_obj = (obj); RB_SPECIAL_CONST_P(arg_obj) ? -1 : (int)RB_BUILTIN_TYPE(arg_obj); })
24830#define FLEX_ARY_LEN
24831#define BITFIELD(type,name,size) type name : size
24832#define RVALUE_SIZE (sizeof(struct RBasic) + sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]))
24833#define RB_RVARGC_NEWOBJ_OF(var,T,c,f,s) T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? rb_wb_protected_newobj_of((c), (f) & ~FL_WB_PROTECTED, s) : rb_wb_unprotected_newobj_of((c), (f), s))
24834#define RB_RVARGC_EC_NEWOBJ_OF(ec,var,T,c,f,s) T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? rb_ec_wb_protected_newobj_of((ec), (c), (f) & ~FL_WB_PROTECTED, s) : rb_wb_unprotected_newobj_of((c), (f), s))
24835#define RB_NEWOBJ_OF(var,T,c,f) RB_RVARGC_NEWOBJ_OF(var, T, c, f, RVALUE_SIZE)
24836#define RB_EC_NEWOBJ_OF(ec,var,T,c,f) RB_RVARGC_EC_NEWOBJ_OF(ec, var, T, c, f, RVALUE_SIZE)
24837#define NEWOBJ_OF(var,T,c,f) RB_NEWOBJ_OF((var), T, (c), (f))
24838#define RVARGC_NEWOBJ_OF(var,T,c,f,s) RB_RVARGC_NEWOBJ_OF((var), T, (c), (f), (s))
24839#define RB_OBJ_GC_FLAGS_MAX 6
24840#define INTERNAL_WARNINGS_H
24841#define COMPILER_WARNING_PUSH RBIMPL_WARNING_PUSH()
24842#define COMPILER_WARNING_POP RBIMPL_WARNING_POP()
24843#define COMPILER_WARNING_ERROR(flag) RBIMPL_WARNING_ERROR(flag)
24844#define COMPILER_WARNING_IGNORED(flag) RBIMPL_WARNING_IGNORED(flag)
24845#define UNALIGNED_MEMBER_ACCESS(expr) __extension__({ COMPILER_WARNING_PUSH; COMPILER_WARNING_IGNORED(-Waddress-of-packed-member); __typeof__(expr) unaligned_member_access_result = (expr); COMPILER_WARNING_POP; unaligned_member_access_result; })
24846#define UNALIGNED_MEMBER_PTR(ptr,mem) UNALIGNED_MEMBER_ACCESS(&(ptr)->mem)
24847#define RB_OBJ_WRITE(a,slot,b) rb_obj_write((VALUE)(a), UNALIGNED_MEMBER_ACCESS((VALUE *)(slot)), (VALUE)(b), __FILE__, __LINE__)
24848#define SIZE_POOL_COUNT 1
24849#pragma GCC visibility push(default)
24850#pragma GCC visibility pop
24851#pragma GCC visibility push(default)
24852#pragma GCC visibility pop
24853#define SIZED_REALLOC_N(x,y,z,w) REALLOC_N(x, y, z)
24854#define ruby_sized_xrealloc ruby_sized_xrealloc_inlined
24855#define ruby_sized_xrealloc2 ruby_sized_xrealloc2_inlined
24856#define ruby_sized_xfree ruby_sized_xfree_inlined
24857#define IMEMO_DEBUG 0
24858#define IMEMO_MASK 0x0f
24859#define IMEMO_FL_USHIFT (FL_USHIFT + 4)
24860#define IMEMO_FL_USER0 FL_USER4
24861#define IMEMO_FL_USER1 FL_USER5
24862#define IMEMO_FL_USER2 FL_USER6
24863#define IMEMO_FL_USER3 FL_USER7
24864#define IMEMO_FL_USER4 FL_USER8
24865#define IMEMO_FL_USER5 FL_USER9
24866#define THROW_DATA_CONSUMED IMEMO_FL_USER0
24867#define THROW_DATA_P(err) imemo_throw_data_p((VALUE)err)
24868#define MEMO_CAST(m) ((struct MEMO *)(m))
24869#define MEMO_NEW(a,b,c) ((struct MEMO *)rb_imemo_new(imemo_memo, (VALUE)(a), (VALUE)(b), (VALUE)(c), 0))
24870#define MEMO_FOR(type,value) ((type *)RARRAY_PTR(value))
24871#define NEW_MEMO_FOR(type,value) ((value) = rb_ary_tmp_new_fill(type_roomof(type, VALUE)), MEMO_FOR(type, value))
24872#define NEW_PARTIAL_MEMO_FOR(type,value,member) ((value) = rb_ary_tmp_new_fill(type_roomof(type, VALUE)), rb_ary_set_len((value), offsetof(type, member) / sizeof(VALUE)), MEMO_FOR(type, value))
24873#pragma GCC visibility push(default)
24874#pragma GCC visibility pop
24875#define IMEMO_TYPE_P(v,t) imemo_type_p((VALUE)v, t)
24876#pragma GCC diagnostic push
24877#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24878#pragma GCC diagnostic pop
24879#pragma GCC diagnostic push
24880#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24881#pragma GCC diagnostic pop
24882#define END_OF_ENUMERATION(key)
24883#define METHOD_ENTRY_VISI(me) (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0))
24884#define METHOD_ENTRY_BASIC(me) (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2))
24885#define METHOD_ENTRY_COMPLEMENTED(me) ((me)->flags & IMEMO_FL_USER3)
24886#define METHOD_ENTRY_COMPLEMENTED_SET(me) ((me)->flags |= IMEMO_FL_USER3)
24887#define METHOD_ENTRY_CACHED(me) ((me)->flags & IMEMO_FL_USER4)
24888#define METHOD_ENTRY_CACHED_SET(me) ((me)->flags |= IMEMO_FL_USER4)
24889#define METHOD_ENTRY_INVALIDATED(me) ((me)->flags & IMEMO_FL_USER5)
24890#define METHOD_ENTRY_INVALIDATED_SET(me) ((me)->flags |= IMEMO_FL_USER5)
24891#define METHOD_ENTRY_CACHEABLE(me) !(METHOD_ENTRY_VISI(me) == METHOD_VISI_PROTECTED)
24892#define VM_METHOD_TYPE_MINIMUM_BITS 4
24893#define rb_iseq_t rb_iseq_t
24894#define UNDEFINED_METHOD_ENTRY_P(me) (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF)
24895#define UNDEFINED_REFINED_METHOD_P(def) ((def)->type == VM_METHOD_TYPE_REFINED && UNDEFINED_METHOD_ENTRY_P((def)->body.refined.orig_me))
24896#pragma GCC visibility push(default)
24897#pragma GCC visibility pop
24898#define RUBY_NODE_H 1
24899#define RNODE(obj) ((struct RNode *)(obj))
24900#define NODE_FL_NEWLINE (((VALUE)1)<<7)
24901#define NODE_TYPESHIFT 8
24902#define NODE_TYPEMASK (((VALUE)0x7f)<<NODE_TYPESHIFT)
24903#define nd_type(n) ((int) (((n)->flags & NODE_TYPEMASK)>>NODE_TYPESHIFT))
24904#define nd_set_type(n,t) rb_node_set_type(n, t)
24905#define nd_init_type(n,t) (n)->flags=(((n)->flags&~NODE_TYPEMASK)|((((unsigned long)(t))<<NODE_TYPESHIFT)&NODE_TYPEMASK))
24906#define NODE_LSHIFT (NODE_TYPESHIFT+7)
24907#define NODE_LMASK (((SIGNED_VALUE)1<<(sizeof(VALUE)*CHAR_BIT-NODE_LSHIFT))-1)
24908#define nd_line(n) (int)(((SIGNED_VALUE)(n)->flags)>>NODE_LSHIFT)
24909#define nd_set_line(n,l) (n)->flags=(((n)->flags&~((VALUE)(-1)<<NODE_LSHIFT))|((VALUE)((l)&NODE_LMASK)<<NODE_LSHIFT))
24910#define nd_first_column(n) ((int)((n)->nd_loc.beg_pos.column))
24911#define nd_set_first_column(n,v) ((n)->nd_loc.beg_pos.column = (v))
24912#define nd_first_lineno(n) ((int)((n)->nd_loc.beg_pos.lineno))
24913#define nd_set_first_lineno(n,v) ((n)->nd_loc.beg_pos.lineno = (v))
24914#define nd_first_loc(n) ((n)->nd_loc.beg_pos)
24915#define nd_set_first_loc(n,v) (nd_first_loc(n) = (v))
24916#define nd_last_column(n) ((int)((n)->nd_loc.end_pos.column))
24917#define nd_set_last_column(n,v) ((n)->nd_loc.end_pos.column = (v))
24918#define nd_last_lineno(n) ((int)((n)->nd_loc.end_pos.lineno))
24919#define nd_set_last_lineno(n,v) ((n)->nd_loc.end_pos.lineno = (v))
24920#define nd_last_loc(n) ((n)->nd_loc.end_pos)
24921#define nd_set_last_loc(n,v) (nd_last_loc(n) = (v))
24922#define nd_node_id(n) ((n)->node_id)
24923#define nd_set_node_id(n,id) ((n)->node_id = (id))
24924#define nd_head u1.node
24925#define nd_alen u2.argc
24926#define nd_next u3.node
24927#define nd_cond u1.node
24928#define nd_body u2.node
24929#define nd_else u3.node
24930#define nd_resq u2.node
24931#define nd_ensr u3.node
24932#define nd_1st u1.node
24933#define nd_2nd u2.node
24934#define nd_stts u1.node
24935#define nd_entry u3.id
24936#define nd_vid u1.id
24937#define nd_var u1.node
24938#define nd_iter u3.node
24939#define nd_value u2.node
24940#define nd_aid u3.id
24941#define nd_lit u1.value
24942#define nd_recv u1.node
24943#define nd_mid u2.id
24944#define nd_args u3.node
24945#define nd_ainfo u3.args
24946#define nd_defn u3.node
24947#define nd_cpath u1.node
24948#define nd_super u3.node
24949#define nd_beg u1.node
24950#define nd_end u2.node
24951#define nd_state u3.state
24952#define nd_nth u2.argc
24953#define nd_alias u1.id
24954#define nd_orig u2.id
24955#define nd_undef u2.node
24956#define nd_brace u2.argc
24957#define nd_pconst u1.node
24958#define nd_pkwargs u2.node
24959#define nd_pkwrestarg u3.node
24960#define nd_apinfo u3.apinfo
24961#define nd_fpinfo u3.fpinfo
24962#define nd_tbl u1.tbl
24963#define nd_pid u1.id
24964#define nd_plen u2.argc
24965#define nd_cflag u2.id
24966#define nd_cval u3.value
24967#define nd_rval u2.value
24968#define nd_tag u1.id
24969#define NEW_NODE(t,a0,a1,a2,loc) rb_node_newnode((t),(VALUE)(a0),(VALUE)(a1),(VALUE)(a2),loc)
24970#define NEW_NODE_WITH_LOCALS(t,a1,a2,loc) node_newnode_with_locals(p, (t),(VALUE)(a1),(VALUE)(a2),loc)
24971#define NEW_DEFN(i,a,d,loc) NEW_NODE(NODE_DEFN,0,i,NEW_SCOPE(a,d,loc),loc)
24972#define NEW_DEFS(r,i,a,d,loc) NEW_NODE(NODE_DEFS,r,i,NEW_SCOPE(a,d,loc),loc)
24973#define NEW_SCOPE(a,b,loc) NEW_NODE_WITH_LOCALS(NODE_SCOPE,b,a,loc)
24974#define NEW_BLOCK(a,loc) NEW_NODE(NODE_BLOCK,a,0,0,loc)
24975#define NEW_IF(c,t,e,loc) NEW_NODE(NODE_IF,c,t,e,loc)
24976#define NEW_UNLESS(c,t,e,loc) NEW_NODE(NODE_UNLESS,c,t,e,loc)
24977#define NEW_CASE(h,b,loc) NEW_NODE(NODE_CASE,h,b,0,loc)
24978#define NEW_CASE2(b,loc) NEW_NODE(NODE_CASE2,0,b,0,loc)
24979#define NEW_CASE3(h,b,loc) NEW_NODE(NODE_CASE3,h,b,0,loc)
24980#define NEW_WHEN(c,t,e,loc) NEW_NODE(NODE_WHEN,c,t,e,loc)
24981#define NEW_IN(c,t,e,loc) NEW_NODE(NODE_IN,c,t,e,loc)
24982#define NEW_WHILE(c,b,n,loc) NEW_NODE(NODE_WHILE,c,b,n,loc)
24983#define NEW_UNTIL(c,b,n,loc) NEW_NODE(NODE_UNTIL,c,b,n,loc)
24984#define NEW_FOR(i,b,loc) NEW_NODE(NODE_FOR,0,b,i,loc)
24985#define NEW_FOR_MASGN(v,loc) NEW_NODE(NODE_FOR_MASGN,v,0,0,loc)
24986#define NEW_ITER(a,b,loc) NEW_NODE(NODE_ITER,0,NEW_SCOPE(a,b,loc),0,loc)
24987#define NEW_LAMBDA(a,b,loc) NEW_NODE(NODE_LAMBDA,0,NEW_SCOPE(a,b,loc),0,loc)
24988#define NEW_BREAK(s,loc) NEW_NODE(NODE_BREAK,s,0,0,loc)
24989#define NEW_NEXT(s,loc) NEW_NODE(NODE_NEXT,s,0,0,loc)
24990#define NEW_REDO(loc) NEW_NODE(NODE_REDO,0,0,0,loc)
24991#define NEW_RETRY(loc) NEW_NODE(NODE_RETRY,0,0,0,loc)
24992#define NEW_BEGIN(b,loc) NEW_NODE(NODE_BEGIN,0,b,0,loc)
24993#define NEW_RESCUE(b,res,e,loc) NEW_NODE(NODE_RESCUE,b,res,e,loc)
24994#define NEW_RESBODY(a,ex,n,loc) NEW_NODE(NODE_RESBODY,n,ex,a,loc)
24995#define NEW_ENSURE(b,en,loc) NEW_NODE(NODE_ENSURE,b,0,en,loc)
24996#define NEW_RETURN(s,loc) NEW_NODE(NODE_RETURN,s,0,0,loc)
24997#define NEW_YIELD(a,loc) NEW_NODE(NODE_YIELD,a,0,0,loc)
24998#define NEW_LIST(a,loc) NEW_NODE(NODE_LIST,a,1,0,loc)
24999#define NEW_ZLIST(loc) NEW_NODE(NODE_ZLIST,0,0,0,loc)
25000#define NEW_HASH(a,loc) NEW_NODE(NODE_HASH,a,0,0,loc)
25001#define NEW_MASGN(l,r,loc) NEW_NODE(NODE_MASGN,l,0,r,loc)
25002#define NEW_GASGN(v,val,loc) NEW_NODE(NODE_GASGN,v,val,v,loc)
25003#define NEW_LASGN(v,val,loc) NEW_NODE(NODE_LASGN,v,val,0,loc)
25004#define NEW_DASGN(v,val,loc) NEW_NODE(NODE_DASGN,v,val,0,loc)
25005#define NEW_IASGN(v,val,loc) NEW_NODE(NODE_IASGN,v,val,0,loc)
25006#define NEW_CDECL(v,val,path,loc) NEW_NODE(NODE_CDECL,v,val,path,loc)
25007#define NEW_CVASGN(v,val,loc) NEW_NODE(NODE_CVASGN,v,val,0,loc)
25008#define NEW_OP_ASGN1(p,id,a,loc) NEW_NODE(NODE_OP_ASGN1,p,id,a,loc)
25009#define NEW_OP_ASGN2(r,t,i,o,val,loc) NEW_NODE(NODE_OP_ASGN2,r,val,NEW_OP_ASGN22(i,o,t,loc),loc)
25010#define NEW_OP_ASGN22(i,o,t,loc) NEW_NODE(NODE_OP_ASGN2,i,o,t,loc)
25011#define NEW_OP_ASGN_OR(i,val,loc) NEW_NODE(NODE_OP_ASGN_OR,i,val,0,loc)
25012#define NEW_OP_ASGN_AND(i,val,loc) NEW_NODE(NODE_OP_ASGN_AND,i,val,0,loc)
25013#define NEW_OP_CDECL(v,op,val,loc) NEW_NODE(NODE_OP_CDECL,v,val,op,loc)
25014#define NEW_GVAR(v,loc) NEW_NODE(NODE_GVAR,v,0,v,loc)
25015#define NEW_LVAR(v,loc) NEW_NODE(NODE_LVAR,v,0,0,loc)
25016#define NEW_DVAR(v,loc) NEW_NODE(NODE_DVAR,v,0,0,loc)
25017#define NEW_IVAR(v,loc) NEW_NODE(NODE_IVAR,v,0,0,loc)
25018#define NEW_CONST(v,loc) NEW_NODE(NODE_CONST,v,0,0,loc)
25019#define NEW_CVAR(v,loc) NEW_NODE(NODE_CVAR,v,0,0,loc)
25020#define NEW_NTH_REF(n,loc) NEW_NODE(NODE_NTH_REF,0,n,0,loc)
25021#define NEW_BACK_REF(n,loc) NEW_NODE(NODE_BACK_REF,0,n,0,loc)
25022#define NEW_MATCH(c,loc) NEW_NODE(NODE_MATCH,c,0,0,loc)
25023#define NEW_MATCH2(n1,n2,loc) NEW_NODE(NODE_MATCH2,n1,n2,0,loc)
25024#define NEW_MATCH3(r,n2,loc) NEW_NODE(NODE_MATCH3,r,n2,0,loc)
25025#define NEW_LIT(l,loc) NEW_NODE(NODE_LIT,l,0,0,loc)
25026#define NEW_STR(s,loc) NEW_NODE(NODE_STR,s,0,0,loc)
25027#define NEW_DSTR(s,loc) NEW_NODE(NODE_DSTR,s,1,0,loc)
25028#define NEW_XSTR(s,loc) NEW_NODE(NODE_XSTR,s,0,0,loc)
25029#define NEW_DXSTR(s,loc) NEW_NODE(NODE_DXSTR,s,0,0,loc)
25030#define NEW_DSYM(s,loc) NEW_NODE(NODE_DSYM,s,0,0,loc)
25031#define NEW_EVSTR(n,loc) NEW_NODE(NODE_EVSTR,0,(n),0,loc)
25032#define NEW_CALL(r,m,a,loc) NEW_NODE(NODE_CALL,r,m,a,loc)
25033#define NEW_OPCALL(r,m,a,loc) NEW_NODE(NODE_OPCALL,r,m,a,loc)
25034#define NEW_FCALL(m,a,loc) NEW_NODE(NODE_FCALL,0,m,a,loc)
25035#define NEW_VCALL(m,loc) NEW_NODE(NODE_VCALL,0,m,0,loc)
25036#define NEW_SUPER(a,loc) NEW_NODE(NODE_SUPER,0,0,a,loc)
25037#define NEW_ZSUPER(loc) NEW_NODE(NODE_ZSUPER,0,0,0,loc)
25038#define NEW_ARGS_AUX(r,b,loc) NEW_NODE(NODE_ARGS_AUX,r,b,0,loc)
25039#define NEW_OPT_ARG(i,v,loc) NEW_NODE(NODE_OPT_ARG,i,v,0,loc)
25040#define NEW_KW_ARG(i,v,loc) NEW_NODE(NODE_KW_ARG,i,v,0,loc)
25041#define NEW_POSTARG(i,v,loc) NEW_NODE(NODE_POSTARG,i,v,0,loc)
25042#define NEW_ARGSCAT(a,b,loc) NEW_NODE(NODE_ARGSCAT,a,b,0,loc)
25043#define NEW_ARGSPUSH(a,b,loc) NEW_NODE(NODE_ARGSPUSH,a,b,0,loc)
25044#define NEW_SPLAT(a,loc) NEW_NODE(NODE_SPLAT,a,0,0,loc)
25045#define NEW_BLOCK_PASS(b,loc) NEW_NODE(NODE_BLOCK_PASS,0,b,0,loc)
25046#define NEW_ALIAS(n,o,loc) NEW_NODE(NODE_ALIAS,n,o,0,loc)
25047#define NEW_VALIAS(n,o,loc) NEW_NODE(NODE_VALIAS,n,o,0,loc)
25048#define NEW_UNDEF(i,loc) NEW_NODE(NODE_UNDEF,0,i,0,loc)
25049#define NEW_CLASS(n,b,s,loc) NEW_NODE(NODE_CLASS,n,NEW_SCOPE(0,b,loc),(s),loc)
25050#define NEW_SCLASS(r,b,loc) NEW_NODE(NODE_SCLASS,r,NEW_SCOPE(0,b,loc),0,loc)
25051#define NEW_MODULE(n,b,loc) NEW_NODE(NODE_MODULE,n,NEW_SCOPE(0,b,loc),0,loc)
25052#define NEW_COLON2(c,i,loc) NEW_NODE(NODE_COLON2,c,i,0,loc)
25053#define NEW_COLON3(i,loc) NEW_NODE(NODE_COLON3,0,i,0,loc)
25054#define NEW_DOT2(b,e,loc) NEW_NODE(NODE_DOT2,b,e,0,loc)
25055#define NEW_DOT3(b,e,loc) NEW_NODE(NODE_DOT3,b,e,0,loc)
25056#define NEW_SELF(loc) NEW_NODE(NODE_SELF,0,0,1,loc)
25057#define NEW_NIL(loc) NEW_NODE(NODE_NIL,0,0,0,loc)
25058#define NEW_TRUE(loc) NEW_NODE(NODE_TRUE,0,0,0,loc)
25059#define NEW_FALSE(loc) NEW_NODE(NODE_FALSE,0,0,0,loc)
25060#define NEW_ERRINFO(loc) NEW_NODE(NODE_ERRINFO,0,0,0,loc)
25061#define NEW_DEFINED(e,loc) NEW_NODE(NODE_DEFINED,e,0,0,loc)
25062#define NEW_PREEXE(b,loc) NEW_SCOPE(b,loc)
25063#define NEW_POSTEXE(b,loc) NEW_NODE(NODE_POSTEXE,0,b,0,loc)
25064#define NEW_ATTRASGN(r,m,a,loc) NEW_NODE(NODE_ATTRASGN,r,m,a,loc)
25065#define NODE_SPECIAL_REQUIRED_KEYWORD ((NODE *)-1)
25066#define NODE_REQUIRED_KEYWORD_P(node) ((node)->nd_value == NODE_SPECIAL_REQUIRED_KEYWORD)
25067#define NODE_SPECIAL_NO_NAME_REST ((NODE *)-1)
25068#define NODE_NAMED_REST_P(node) ((node) != NODE_SPECIAL_NO_NAME_REST)
25069#define NODE_SPECIAL_EXCESSIVE_COMMA ((ID)1)
25070#define NODE_SPECIAL_NO_REST_KEYWORD ((NODE *)-1)
25071#pragma GCC visibility push(default)
25072#pragma GCC visibility pop
25073#define RUBY_ATOMIC_H
25074#define RUBY_ATOMIC_GENERIC_MACRO 1
25075#define RUBY_ATOMIC_FETCH_ADD(var,val) rbimpl_atomic_fetch_add(&(var), (val))
25076#define RUBY_ATOMIC_FETCH_SUB(var,val) rbimpl_atomic_fetch_sub(&(var), (val))
25077#define RUBY_ATOMIC_OR(var,val) rbimpl_atomic_or(&(var), (val))
25078#define RUBY_ATOMIC_EXCHANGE(var,val) rbimpl_atomic_exchange(&(var), (val))
25079#define RUBY_ATOMIC_CAS(var,oldval,newval) rbimpl_atomic_cas(&(var), (oldval), (newval))
25080#define RUBY_ATOMIC_SET(var,val) rbimpl_atomic_set(&(var), (val))
25081#define RUBY_ATOMIC_ADD(var,val) rbimpl_atomic_add(&(var), (val))
25082#define RUBY_ATOMIC_SUB(var,val) rbimpl_atomic_sub(&(var), (val))
25083#define RUBY_ATOMIC_INC(var) rbimpl_atomic_inc(&(var))
25084#define RUBY_ATOMIC_DEC(var) rbimpl_atomic_dec(&(var))
25085#define RUBY_ATOMIC_SIZE_INC(var) rbimpl_atomic_size_inc(&(var))
25086#define RUBY_ATOMIC_SIZE_DEC(var) rbimpl_atomic_size_dec(&(var))
25087#define RUBY_ATOMIC_SIZE_EXCHANGE(var,val) rbimpl_atomic_size_exchange(&(var), (val))
25088#define RUBY_ATOMIC_SIZE_CAS(var,oldval,newval) rbimpl_atomic_size_cas(&(var), (oldval), (newval))
25089#define RUBY_ATOMIC_SIZE_ADD(var,val) rbimpl_atomic_size_add(&(var), (val))
25090#define RUBY_ATOMIC_SIZE_SUB(var,val) rbimpl_atomic_size_sub(&(var), (val))
25091#define RUBY_ATOMIC_PTR_EXCHANGE(var,val) RBIMPL_CAST(rbimpl_atomic_ptr_exchange((void **)&(var), (void *)val))
25092#define RUBY_ATOMIC_PTR_CAS(var,oldval,newval) RBIMPL_CAST(rbimpl_atomic_ptr_cas((void **)&(var), (oldval), (newval)))
25093#define RUBY_ATOMIC_VALUE_EXCHANGE(var,val) rbimpl_atomic_value_exchange(&(var), (val))
25094#define RUBY_ATOMIC_VALUE_CAS(var,oldval,newval) rbimpl_atomic_value_cas(&(var), (oldval), (newval))
25095#define ATOMIC_ADD(var,val) RUBY_ATOMIC_ADD(var, val)
25096#define ATOMIC_CAS(var,oldval,newval) RUBY_ATOMIC_CAS(var, oldval, newval)
25097#define ATOMIC_DEC(var) RUBY_ATOMIC_DEC(var)
25098#define ATOMIC_EXCHANGE(var,val) RUBY_ATOMIC_EXCHANGE(var, val)
25099#define ATOMIC_FETCH_ADD(var,val) RUBY_ATOMIC_FETCH_ADD(var, val)
25100#define ATOMIC_FETCH_SUB(var,val) RUBY_ATOMIC_FETCH_SUB(var, val)
25101#define ATOMIC_INC(var) RUBY_ATOMIC_INC(var)
25102#define ATOMIC_OR(var,val) RUBY_ATOMIC_OR(var, val)
25103#define ATOMIC_PTR_CAS(var,oldval,newval) RUBY_ATOMIC_PTR_CAS(var, oldval, newval)
25104#define ATOMIC_PTR_EXCHANGE(var,val) RUBY_ATOMIC_PTR_EXCHANGE(var, val)
25105#define ATOMIC_SET(var,val) RUBY_ATOMIC_SET(var, val)
25106#define ATOMIC_SIZE_ADD(var,val) RUBY_ATOMIC_SIZE_ADD(var, val)
25107#define ATOMIC_SIZE_CAS(var,oldval,newval) RUBY_ATOMIC_SIZE_CAS(var, oldval, newval)
25108#define ATOMIC_SIZE_DEC(var) RUBY_ATOMIC_SIZE_DEC(var)
25109#define ATOMIC_SIZE_EXCHANGE(var,val) RUBY_ATOMIC_SIZE_EXCHANGE(var, val)
25110#define ATOMIC_SIZE_INC(var) RUBY_ATOMIC_SIZE_INC(var)
25111#define ATOMIC_SIZE_SUB(var,val) RUBY_ATOMIC_SIZE_SUB(var, val)
25112#define ATOMIC_SUB(var,val) RUBY_ATOMIC_SUB(var, val)
25113#define ATOMIC_VALUE_CAS(var,oldval,val) RUBY_ATOMIC_VALUE_CAS(var, oldval, val)
25114#define ATOMIC_VALUE_EXCHANGE(var,val) RUBY_ATOMIC_VALUE_EXCHANGE(var, val)
25115#define RUBY_VM_OPTS_H
25116#define OPT_TAILCALL_OPTIMIZATION 0
25117#define OPT_PEEPHOLE_OPTIMIZATION 1
25118#define OPT_SPECIALISED_INSTRUCTION 1
25119#define OPT_INLINE_CONST_CACHE 1
25120#define OPT_FROZEN_STRING_LITERAL 0
25121#define OPT_DEBUG_FROZEN_STRING_LITERAL 0
25122#define OPT_THREADED_CODE 0
25123#define OPT_DIRECT_THREADED_CODE (OPT_THREADED_CODE == 0)
25124#define OPT_TOKEN_THREADED_CODE (OPT_THREADED_CODE == 1)
25125#define OPT_CALL_THREADED_CODE (OPT_THREADED_CODE == 2)
25126#define OPT_CHECKED_RUN 1
25127#define OPT_INLINE_METHOD_CACHE 1
25128#define OPT_GLOBAL_METHOD_CACHE 1
25129#define OPT_BLOCKINLINING 0
25130#define OPT_IC_FOR_IVAR 1
25131#define OPT_OPERANDS_UNIFICATION 1
25132#define OPT_INSTRUCTIONS_UNIFICATION 0
25133#define OPT_UNIFY_ALL_COMBINATION 0
25134#define OPT_STACK_CACHING 0
25135#define OPT_SUPPORT_JOKE 0
25136#define OPT_SUPPORT_CALL_C_FUNCTION 0
25137#define VM_COLLECT_USAGE_DETAILS 0
25138#define RUBY_DARRAY_H
25139#define rb_darray(T) struct { rb_darray_meta_t meta; T data[]; } *
25140#define rb_darray_get(ary,idx) ((ary)->data[(idx)])
25141#define rb_darray_set(ary,idx,element) ((ary)->data[(idx)] = (element))
25142#define rb_darray_ref(ary,idx) (&((ary)->data[(idx)]))
25143#define rb_darray_append(ptr_to_ary,element) ( rb_darray_ensure_space((ptr_to_ary), sizeof(**(ptr_to_ary)), sizeof((*(ptr_to_ary))->data[0])) ? ( rb_darray_set(*(ptr_to_ary), (*(ptr_to_ary))->meta.size, (element)), ++((*(ptr_to_ary))->meta.size), 1 ) : 0)
25144#define rb_darray_back(ary) ((ary)->data[(ary)->meta.size - 1])
25145#define rb_darray_pop_back(ary) ((ary)->meta.size--)
25146#define rb_darray_remove_unordered(ary,idx) do { rb_darray_set(ary, idx, rb_darray_back(ary)); rb_darray_pop_back(ary); } while (0);
25147#define rb_darray_foreach(ary,idx_name,elem_ptr_var) for (int idx_name = 0; idx_name < rb_darray_size(ary) && ((elem_ptr_var) = rb_darray_ref(ary, idx_name)); ++idx_name)
25148#define rb_darray_for(ary,idx_name) for (int idx_name = 0; idx_name < rb_darray_size(ary); ++idx_name)
25149#define rb_darray_make(ptr_to_ary,size) rb_darray_make_impl((ptr_to_ary), size, sizeof(**(ptr_to_ary)), sizeof((*(ptr_to_ary))->data[0]))
25150#define rb_darray_clear(ary) (ary->meta.size = 0)
25151#define RUBY_THREAD_NATIVE_H 1
25152#define _PTHREAD_H 1
25153#define _SCHED_H 1
25154#define __need_size_t
25155#define __need_NULL
25156#undef __need_ptrdiff_t
25157#undef __need_size_t
25158#undef __need_wchar_t
25159#undef NULL
25160#define NULL ((void *)0)
25161#undef __need_NULL
25162#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
25163#define _BITS_SCHED_H 1
25164#define SCHED_OTHER 0
25165#define SCHED_FIFO 1
25166#define SCHED_RR 2
25167#define SCHED_BATCH 3
25168#define SCHED_ISO 4
25169#define SCHED_IDLE 5
25170#define SCHED_DEADLINE 6
25171#define SCHED_RESET_ON_FORK 0x40000000
25172#define CSIGNAL 0x000000ff
25173#define CLONE_VM 0x00000100
25174#define CLONE_FS 0x00000200
25175#define CLONE_FILES 0x00000400
25176#define CLONE_SIGHAND 0x00000800
25177#define CLONE_PIDFD 0x00001000
25178#define CLONE_PTRACE 0x00002000
25179#define CLONE_VFORK 0x00004000
25180#define CLONE_PARENT 0x00008000
25181#define CLONE_THREAD 0x00010000
25182#define CLONE_NEWNS 0x00020000
25183#define CLONE_SYSVSEM 0x00040000
25184#define CLONE_SETTLS 0x00080000
25185#define CLONE_PARENT_SETTID 0x00100000
25186#define CLONE_CHILD_CLEARTID 0x00200000
25187#define CLONE_DETACHED 0x00400000
25188#define CLONE_UNTRACED 0x00800000
25189#define CLONE_CHILD_SETTID 0x01000000
25190#define CLONE_NEWCGROUP 0x02000000
25191#define CLONE_NEWUTS 0x04000000
25192#define CLONE_NEWIPC 0x08000000
25193#define CLONE_NEWUSER 0x10000000
25194#define CLONE_NEWPID 0x20000000
25195#define CLONE_NEWNET 0x40000000
25196#define CLONE_IO 0x80000000
25197#define _BITS_TYPES_STRUCT_SCHED_PARAM 1
25198#define _BITS_CPU_SET_H 1
25199#define __CPU_SETSIZE 1024
25200#define __NCPUBITS (8 * sizeof (__cpu_mask))
25201#define __CPUELT(cpu) ((cpu) / __NCPUBITS)
25202#define __CPUMASK(cpu) ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
25203#define __CPU_ZERO_S(setsize,cpusetp) do __builtin_memset (cpusetp, '\0', setsize); while (0)
25204#define __CPU_SET_S(cpu,setsize,cpusetp) (__extension__ ({ size_t __cpu = (cpu); __cpu / 8 < (setsize) ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] |= __CPUMASK (__cpu)) : 0; }))
25205#define __CPU_CLR_S(cpu,setsize,cpusetp) (__extension__ ({ size_t __cpu = (cpu); __cpu / 8 < (setsize) ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] &= ~__CPUMASK (__cpu)) : 0; }))
25206#define __CPU_ISSET_S(cpu,setsize,cpusetp) (__extension__ ({ size_t __cpu = (cpu); __cpu / 8 < (setsize) ? ((((const __cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] & __CPUMASK (__cpu))) != 0 : 0; }))
25207#define __CPU_COUNT_S(setsize,cpusetp) __sched_cpucount (setsize, cpusetp)
25208#define __CPU_EQUAL_S(setsize,cpusetp1,cpusetp2) (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0)
25209#define __CPU_OP_S(setsize,destset,srcset1,srcset2,op) (__extension__ ({ cpu_set_t *__dest = (destset); const __cpu_mask *__arr1 = (srcset1)->__bits; const __cpu_mask *__arr2 = (srcset2)->__bits; size_t __imax = (setsize) / sizeof (__cpu_mask); size_t __i; for (__i = 0; __i < __imax; ++__i) ((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i]; __dest; }))
25210#define __CPU_ALLOC_SIZE(count) ((((count) + __NCPUBITS - 1) / __NCPUBITS) * sizeof (__cpu_mask))
25211#define __CPU_ALLOC(count) __sched_cpualloc (count)
25212#define __CPU_FREE(cpuset) __sched_cpufree (cpuset)
25213#define sched_priority sched_priority
25214#define __sched_priority sched_priority
25215#define CPU_SETSIZE __CPU_SETSIZE
25216#define CPU_SET(cpu,cpusetp) __CPU_SET_S (cpu, sizeof (cpu_set_t), cpusetp)
25217#define CPU_CLR(cpu,cpusetp) __CPU_CLR_S (cpu, sizeof (cpu_set_t), cpusetp)
25218#define CPU_ISSET(cpu,cpusetp) __CPU_ISSET_S (cpu, sizeof (cpu_set_t), cpusetp)
25219#define CPU_ZERO(cpusetp) __CPU_ZERO_S (sizeof (cpu_set_t), cpusetp)
25220#define CPU_COUNT(cpusetp) __CPU_COUNT_S (sizeof (cpu_set_t), cpusetp)
25221#define CPU_SET_S(cpu,setsize,cpusetp) __CPU_SET_S (cpu, setsize, cpusetp)
25222#define CPU_CLR_S(cpu,setsize,cpusetp) __CPU_CLR_S (cpu, setsize, cpusetp)
25223#define CPU_ISSET_S(cpu,setsize,cpusetp) __CPU_ISSET_S (cpu, setsize, cpusetp)
25224#define CPU_ZERO_S(setsize,cpusetp) __CPU_ZERO_S (setsize, cpusetp)
25225#define CPU_COUNT_S(setsize,cpusetp) __CPU_COUNT_S (setsize, cpusetp)
25226#define CPU_EQUAL(cpusetp1,cpusetp2) __CPU_EQUAL_S (sizeof (cpu_set_t), cpusetp1, cpusetp2)
25227#define CPU_EQUAL_S(setsize,cpusetp1,cpusetp2) __CPU_EQUAL_S (setsize, cpusetp1, cpusetp2)
25228#define CPU_AND(destset,srcset1,srcset2) __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, &)
25229#define CPU_OR(destset,srcset1,srcset2) __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, |)
25230#define CPU_XOR(destset,srcset1,srcset2) __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, ^)
25231#define CPU_AND_S(setsize,destset,srcset1,srcset2) __CPU_OP_S (setsize, destset, srcset1, srcset2, &)
25232#define CPU_OR_S(setsize,destset,srcset1,srcset2) __CPU_OP_S (setsize, destset, srcset1, srcset2, |)
25233#define CPU_XOR_S(setsize,destset,srcset1,srcset2) __CPU_OP_S (setsize, destset, srcset1, srcset2, ^)
25234#define CPU_ALLOC_SIZE(count) __CPU_ALLOC_SIZE (count)
25235#define CPU_ALLOC(count) __CPU_ALLOC (count)
25236#define CPU_FREE(cpuset) __CPU_FREE (cpuset)
25237#define __WORDSIZE 64
25238#define __WORDSIZE_TIME64_COMPAT32 1
25239#define __SYSCALL_WORDSIZE 64
25240#define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE
25241#define PTHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED
25242#define PTHREAD_MUTEX_INITIALIZER { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_TIMED_NP) } }
25243#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_RECURSIVE_NP) } }
25244#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_ERRORCHECK_NP) } }
25245#define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_ADAPTIVE_NP) } }
25246#define PTHREAD_RWLOCK_INITIALIZER { { __PTHREAD_RWLOCK_INITIALIZER (PTHREAD_RWLOCK_DEFAULT_NP) } }
25247#define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP { { __PTHREAD_RWLOCK_INITIALIZER (PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP) } }
25248#define PTHREAD_INHERIT_SCHED PTHREAD_INHERIT_SCHED
25249#define PTHREAD_EXPLICIT_SCHED PTHREAD_EXPLICIT_SCHED
25250#define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_SYSTEM
25251#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_PROCESS
25252#define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE
25253#define PTHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED
25254#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } }
25255#define PTHREAD_CANCEL_ENABLE PTHREAD_CANCEL_ENABLE
25256#define PTHREAD_CANCEL_DISABLE PTHREAD_CANCEL_DISABLE
25257#define PTHREAD_CANCEL_DEFERRED PTHREAD_CANCEL_DEFERRED
25258#define PTHREAD_CANCEL_ASYNCHRONOUS PTHREAD_CANCEL_ASYNCHRONOUS
25259#define PTHREAD_CANCELED ((void *) -1)
25260#define PTHREAD_ONCE_INIT 0
25261#define PTHREAD_BARRIER_SERIAL_THREAD -1
25262#define PTHREAD_ATTR_NO_SIGMASK_NP (-1)
25263#define __cleanup_fct_attribute
25264#define pthread_cleanup_push(routine,arg) do { __pthread_unwind_buf_t __cancel_buf; void (*__cancel_routine) (void *) = (routine); void *__cancel_arg = (arg); int __not_first_call = __sigsetjmp_cancel (__cancel_buf.__cancel_jmp_buf, 0); if (__glibc_unlikely (__not_first_call)) { __cancel_routine (__cancel_arg); __pthread_unwind_next (&__cancel_buf); } __pthread_register_cancel (&__cancel_buf); do {
25265#define pthread_cleanup_pop(execute) do { } while (0); } while (0); __pthread_unregister_cancel (&__cancel_buf); if (execute) __cancel_routine (__cancel_arg); } while (0)
25266#define pthread_cleanup_push_defer_np(routine,arg) do { __pthread_unwind_buf_t __cancel_buf; void (*__cancel_routine) (void *) = (routine); void *__cancel_arg = (arg); int __not_first_call = __sigsetjmp_cancel (__cancel_buf.__cancel_jmp_buf, 0); if (__glibc_unlikely (__not_first_call)) { __cancel_routine (__cancel_arg); __pthread_unwind_next (&__cancel_buf); } __pthread_register_cancel_defer (&__cancel_buf); do {
25267#define pthread_cleanup_pop_restore_np(execute) do { } while (0); } while (0); __pthread_unregister_cancel_restore (&__cancel_buf); if (execute) __cancel_routine (__cancel_arg); } while (0)
25268#pragma GCC visibility push(default)
25269#pragma GCC visibility pop
25270#define RUBY_THREAD_PTHREAD_H
25271#define RB_NATIVETHREAD_LOCK_INIT PTHREAD_MUTEX_INITIALIZER
25272#define RB_NATIVETHREAD_COND_INIT PTHREAD_COND_INITIALIZER
25273#undef except
25274#undef try
25275#undef leave
25276#undef finally
25277#define RB_THREAD_LOCAL_SPECIFIER __thread
25278#pragma GCC visibility push(default)
25279#pragma GCC visibility pop
25280#define RUBY_VM_THREAD_MODEL 2
25281#define VM_INSN_INFO_TABLE_IMPL 2
25282#define RUBY_NSIG NSIG
25283#define RUBY_SIGCHLD (SIGCLD)
25284#define SIGCHLD_LOSSY (0)
25285#define WAITPID_USE_SIGCHLD (RUBY_SIGCHLD || SIGCHLD_LOSSY)
25286#define USE_SIGALTSTACK
25287#define RB_ALTSTACK_INIT(var,altstack) var = rb_register_sigaltstack(altstack)
25288#define RB_ALTSTACK_FREE(var) free(var)
25289#define RB_ALTSTACK(var) var
25290#define TAG_NONE RUBY_TAG_NONE
25291#define TAG_RETURN RUBY_TAG_RETURN
25292#define TAG_BREAK RUBY_TAG_BREAK
25293#define TAG_NEXT RUBY_TAG_NEXT
25294#define TAG_RETRY RUBY_TAG_RETRY
25295#define TAG_REDO RUBY_TAG_REDO
25296#define TAG_RAISE RUBY_TAG_RAISE
25297#define TAG_THROW RUBY_TAG_THROW
25298#define TAG_FATAL RUBY_TAG_FATAL
25299#define TAG_MASK RUBY_TAG_MASK
25300#define GET_IC_SERIAL(ice) (ice)->ic_serial.raw
25301#define SET_IC_SERIAL(ice,v) (ice)->ic_serial.raw = (v)
25302#define CoreDataFromValue(obj,type) (type*)DATA_PTR(obj)
25303#define GetCoreDataFromValue(obj,type,ptr) ((ptr) = CoreDataFromValue((obj), type))
25304#define PATHOBJ_PATH 0
25305#define PATHOBJ_REALPATH 1
25306#define USE_LAZY_LOAD 0
25307#define GetVMPtr(obj,ptr) GetCoreDataFromValue((obj), rb_vm_t, (ptr))
25308#define VM_GLOBAL_CC_CACHE_TABLE_SIZE 1023
25309#define RUBY_VM_SIZE_ALIGN 4096
25310#define RUBY_VM_THREAD_VM_STACK_SIZE ( 128 * 1024 * sizeof(VALUE))
25311#define RUBY_VM_THREAD_VM_STACK_SIZE_MIN ( 2 * 1024 * sizeof(VALUE))
25312#define RUBY_VM_THREAD_MACHINE_STACK_SIZE ( 128 * 1024 * sizeof(VALUE))
25313#define RUBY_VM_THREAD_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE))
25314#define RUBY_VM_FIBER_VM_STACK_SIZE ( 16 * 1024 * sizeof(VALUE))
25315#define RUBY_VM_FIBER_VM_STACK_SIZE_MIN ( 2 * 1024 * sizeof(VALUE))
25316#define RUBY_VM_FIBER_MACHINE_STACK_SIZE ( 64 * 1024 * sizeof(VALUE))
25317#define RUBY_VM_FIBER_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE))
25318#define INTEGER_REDEFINED_OP_FLAG (1 << 0)
25319#define FLOAT_REDEFINED_OP_FLAG (1 << 1)
25320#define STRING_REDEFINED_OP_FLAG (1 << 2)
25321#define ARRAY_REDEFINED_OP_FLAG (1 << 3)
25322#define HASH_REDEFINED_OP_FLAG (1 << 4)
25323#define SYMBOL_REDEFINED_OP_FLAG (1 << 6)
25324#define TIME_REDEFINED_OP_FLAG (1 << 7)
25325#define REGEXP_REDEFINED_OP_FLAG (1 << 8)
25326#define NIL_REDEFINED_OP_FLAG (1 << 9)
25327#define TRUE_REDEFINED_OP_FLAG (1 << 10)
25328#define FALSE_REDEFINED_OP_FLAG (1 << 11)
25329#define PROC_REDEFINED_OP_FLAG (1 << 12)
25330#define BASIC_OP_UNREDEFINED_P(op,klass) (LIKELY((GET_VM()->redefined_flag[(op)]&(klass)) == 0))
25331#define VM_DEBUG_BP_CHECK 0
25332#define VM_DEBUG_VERIFY_METHOD_CACHE (VMDEBUG != 0)
25333#define rb_execution_context_t rb_execution_context_t
25334#define VM_CORE_H_EC_DEFINED 1
25335#define RB_THREAD_T_HAS_NATIVE_ID
25336#define VM_DEFINECLASS_TYPE(x) ((rb_vm_defineclass_type_t)(x) & VM_DEFINECLASS_TYPE_MASK)
25337#define VM_DEFINECLASS_FLAG_SCOPED 0x08
25338#define VM_DEFINECLASS_FLAG_HAS_SUPERCLASS 0x10
25339#define VM_DEFINECLASS_SCOPED_P(x) ((x) & VM_DEFINECLASS_FLAG_SCOPED)
25340#define VM_DEFINECLASS_HAS_SUPERCLASS_P(x) ((x) & VM_DEFINECLASS_FLAG_HAS_SUPERCLASS)
25341#pragma GCC visibility push(default)
25342#pragma GCC visibility pop
25343#define GetProcPtr(obj,ptr) GetCoreDataFromValue((obj), rb_proc_t, (ptr))
25344#pragma GCC visibility push(default)
25345#pragma GCC visibility pop
25346#define GetBindingPtr(obj,ptr) GetCoreDataFromValue((obj), rb_binding_t, (ptr))
25347#define VM_CHECKMATCH_TYPE_MASK 0x03
25348#define VM_CHECKMATCH_ARRAY 0x04
25349#define FUNC_FASTCALL(x) x
25350#define VM_TAGGED_PTR_SET(p,tag) ((VALUE)(p) | (tag))
25351#define VM_TAGGED_PTR_REF(v,mask) ((void *)((v) & ~mask))
25352#define GC_GUARDED_PTR(p) VM_TAGGED_PTR_SET((p), 0x01)
25353#define GC_GUARDED_PTR_REF(p) VM_TAGGED_PTR_REF((p), 0x03)
25354#define GC_GUARDED_PTR_P(p) (((VALUE)(p)) & 0x01)
25355#define VM_ENV_DATA_SIZE ( 3)
25356#define VM_ENV_DATA_INDEX_ME_CREF (-2)
25357#define VM_ENV_DATA_INDEX_SPECVAL (-1)
25358#define VM_ENV_DATA_INDEX_FLAGS ( 0)
25359#define VM_ENV_DATA_INDEX_ENV ( 1)
25360#define VM_ENV_INDEX_LAST_LVAR (-VM_ENV_DATA_SIZE)
25361#define RUBYVM_CFUNC_FRAME_P(cfp) (VM_FRAME_TYPE(cfp) == VM_FRAME_MAGIC_CFUNC)
25362#define VM_GUARDED_PREV_EP(ep) GC_GUARDED_PTR(ep)
25363#define VM_BLOCK_HANDLER_NONE 0
25364#define RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp) ((cfp)+1)
25365#define RUBY_VM_NEXT_CONTROL_FRAME(cfp) ((cfp)-1)
25366#define RUBY_VM_VALID_CONTROL_FRAME_P(cfp,ecfp) ((void *)(ecfp) > (void *)(cfp))
25367#define SDR() rb_vmdebug_stack_dump_raw(GET_EC(), GET_EC()->cfp)
25368#define SDR2(cfp) rb_vmdebug_stack_dump_raw(GET_EC(), (cfp))
25369#pragma GCC visibility push(default)
25370#pragma GCC visibility pop
25371#define rb_vm_register_special_exception(sp,e,m) rb_vm_register_special_exception_str(sp, e, rb_usascii_str_new_static((m), (long)rb_strlen_lit(m)))
25372#define sysstack_error GET_VM()->special_exceptions[ruby_error_sysstack]
25373#define CHECK_VM_STACK_OVERFLOW0(cfp,sp,margin) do { STATIC_ASSERT(sizeof_sp, sizeof(*(sp)) == sizeof(VALUE)); STATIC_ASSERT(sizeof_cfp, sizeof(*(cfp)) == sizeof(rb_control_frame_t)); const struct rb_control_frame_struct *bound = (void *)&(sp)[(margin)]; if (UNLIKELY((cfp) <= &bound[1])) { vm_stackoverflow(); } } while (0)
25374#define CHECK_VM_STACK_OVERFLOW(cfp,margin) CHECK_VM_STACK_OVERFLOW0((cfp), (cfp)->sp, (margin))
25375#pragma GCC visibility push(default)
25376#pragma GCC visibility pop
25377#define GET_VM() rb_current_vm()
25378#define GET_RACTOR() rb_current_ractor()
25379#define GET_THREAD() rb_current_thread()
25380#define GET_EC() rb_current_execution_context(true)
25381#define RUBY_VM_SET_TIMER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TIMER_INTERRUPT_MASK)
25382#define RUBY_VM_SET_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, PENDING_INTERRUPT_MASK)
25383#define RUBY_VM_SET_POSTPONED_JOB_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, POSTPONED_JOB_INTERRUPT_MASK)
25384#define RUBY_VM_SET_TRAP_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TRAP_INTERRUPT_MASK)
25385#define RUBY_VM_SET_TERMINATE_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TERMINATE_INTERRUPT_MASK)
25386#define RUBY_VM_SET_VM_BARRIER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, VM_BARRIER_INTERRUPT_MASK)
25387#define RUBY_VM_INTERRUPTED(ec) ((ec)->interrupt_flag & ~(ec)->interrupt_mask & (PENDING_INTERRUPT_MASK|TRAP_INTERRUPT_MASK))
25388#define RUBY_VM_CHECK_INTS(ec) rb_vm_check_ints(ec)
25389#define EXEC_EVENT_HOOK_ORIG(ec_,hooks_,flag_,self_,id_,called_id_,klass_,data_,pop_p_) do { const rb_event_flag_t flag_arg_ = (flag_); rb_hook_list_t *hooks_arg_ = (hooks_); if (UNLIKELY((hooks_arg_)->events & (flag_arg_))) { rb_exec_event_hook_orig(ec_, hooks_arg_, flag_arg_, self_, id_, called_id_, klass_, data_, pop_p_); } } while (0)
25390#define EXEC_EVENT_HOOK(ec_,flag_,self_,id_,called_id_,klass_,data_) EXEC_EVENT_HOOK_ORIG(ec_, rb_ec_ractor_hooks(ec_), flag_, self_, id_, called_id_, klass_, data_, 0)
25391#define EXEC_EVENT_HOOK_AND_POP_FRAME(ec_,flag_,self_,id_,called_id_,klass_,data_) EXEC_EVENT_HOOK_ORIG(ec_, rb_ec_ractor_hooks(ec_), flag_, self_, id_, called_id_, klass_, data_, 1)
25392#pragma GCC visibility push(default)
25393#define RUBY_EVENT_COVERAGE_LINE 0x010000
25394#define RUBY_EVENT_COVERAGE_BRANCH 0x020000
25395#pragma GCC visibility pop
25396#define PASS_PASSED_BLOCK_HANDLER_EC(ec) pass_passed_block_handler(ec)
25397#define PASS_PASSED_BLOCK_HANDLER() pass_passed_block_handler(GET_EC())
25398#define ruby_setjmp(env) RUBY_SETJMP(env)
25399#define ruby_longjmp(env,val) RUBY_LONGJMP((env),(val))
25400#define _ERRNO_H 1
25401#define _BITS_ERRNO_H 1
25402#define _ASM_GENERIC_ERRNO_H
25403#define _ASM_GENERIC_ERRNO_BASE_H
25404#define EPERM 1
25405#define ENOENT 2
25406#define ESRCH 3
25407#define EINTR 4
25408#define EIO 5
25409#define ENXIO 6
25410#define E2BIG 7
25411#define ENOEXEC 8
25412#define EBADF 9
25413#define ECHILD 10
25414#define EAGAIN 11
25415#define ENOMEM 12
25416#define EACCES 13
25417#define EFAULT 14
25418#define ENOTBLK 15
25419#define EBUSY 16
25420#define EEXIST 17
25421#define EXDEV 18
25422#define ENODEV 19
25423#define ENOTDIR 20
25424#define EISDIR 21
25425#define EINVAL 22
25426#define ENFILE 23
25427#define EMFILE 24
25428#define ENOTTY 25
25429#define ETXTBSY 26
25430#define EFBIG 27
25431#define ENOSPC 28
25432#define ESPIPE 29
25433#define EROFS 30
25434#define EMLINK 31
25435#define EPIPE 32
25436#define EDOM 33
25437#define ERANGE 34
25438#define EDEADLK 35
25439#define ENAMETOOLONG 36
25440#define ENOLCK 37
25441#define ENOSYS 38
25442#define ENOTEMPTY 39
25443#define ELOOP 40
25444#define EWOULDBLOCK EAGAIN
25445#define ENOMSG 42
25446#define EIDRM 43
25447#define ECHRNG 44
25448#define EL2NSYNC 45
25449#define EL3HLT 46
25450#define EL3RST 47
25451#define ELNRNG 48
25452#define EUNATCH 49
25453#define ENOCSI 50
25454#define EL2HLT 51
25455#define EBADE 52
25456#define EBADR 53
25457#define EXFULL 54
25458#define ENOANO 55
25459#define EBADRQC 56
25460#define EBADSLT 57
25461#define EDEADLOCK EDEADLK
25462#define EBFONT 59
25463#define ENOSTR 60
25464#define ENODATA 61
25465#define ETIME 62
25466#define ENOSR 63
25467#define ENONET 64
25468#define ENOPKG 65
25469#define EREMOTE 66
25470#define ENOLINK 67
25471#define EADV 68
25472#define ESRMNT 69
25473#define ECOMM 70
25474#define EPROTO 71
25475#define EMULTIHOP 72
25476#define EDOTDOT 73
25477#define EBADMSG 74
25478#define EOVERFLOW 75
25479#define ENOTUNIQ 76
25480#define EBADFD 77
25481#define EREMCHG 78
25482#define ELIBACC 79
25483#define ELIBBAD 80
25484#define ELIBSCN 81
25485#define ELIBMAX 82
25486#define ELIBEXEC 83
25487#define EILSEQ 84
25488#define ERESTART 85
25489#define ESTRPIPE 86
25490#define EUSERS 87
25491#define ENOTSOCK 88
25492#define EDESTADDRREQ 89
25493#define EMSGSIZE 90
25494#define EPROTOTYPE 91
25495#define ENOPROTOOPT 92
25496#define EPROTONOSUPPORT 93
25497#define ESOCKTNOSUPPORT 94
25498#define EOPNOTSUPP 95
25499#define EPFNOSUPPORT 96
25500#define EAFNOSUPPORT 97
25501#define EADDRINUSE 98
25502#define EADDRNOTAVAIL 99
25503#define ENETDOWN 100
25504#define ENETUNREACH 101
25505#define ENETRESET 102
25506#define ECONNABORTED 103
25507#define ECONNRESET 104
25508#define ENOBUFS 105
25509#define EISCONN 106
25510#define ENOTCONN 107
25511#define ESHUTDOWN 108
25512#define ETOOMANYREFS 109
25513#define ETIMEDOUT 110
25514#define ECONNREFUSED 111
25515#define EHOSTDOWN 112
25516#define EHOSTUNREACH 113
25517#define EALREADY 114
25518#define EINPROGRESS 115
25519#define ESTALE 116
25520#define EUCLEAN 117
25521#define ENOTNAM 118
25522#define ENAVAIL 119
25523#define EISNAM 120
25524#define EREMOTEIO 121
25525#define EDQUOT 122
25526#define ENOMEDIUM 123
25527#define EMEDIUMTYPE 124
25528#define ECANCELED 125
25529#define ENOKEY 126
25530#define EKEYEXPIRED 127
25531#define EKEYREVOKED 128
25532#define EKEYREJECTED 129
25533#define EOWNERDEAD 130
25534#define ENOTRECOVERABLE 131
25535#define ERFKILL 132
25536#define EHWPOISON 133
25537#define ENOTSUP EOPNOTSUPP
25538#define errno (*__errno_location ())
25539#define __error_t_defined 1
25540#define _SYS_PARAM_H 1
25541#define __need_NULL
25542#undef __need_ptrdiff_t
25543#undef __need_size_t
25544#undef __need_wchar_t
25545#undef NULL
25546#define NULL ((void *)0)
25547#undef __need_NULL
25548#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
25549#define __undef_ARG_MAX
25550#define _LINUX_PARAM_H
25551#define __ASM_GENERIC_PARAM_H
25552#define HZ 100
25553#define EXEC_PAGESIZE 4096
25554#define NOGROUP (-1)
25555#define MAXHOSTNAMELEN 64
25556#undef ARG_MAX
25557#undef __undef_ARG_MAX
25558#define MAXSYMLINKS 20
25559#define NOFILE 256
25560#define NCARGS 131072
25561#define NBBY CHAR_BIT
25562#define NGROUPS NGROUPS_MAX
25563#define CANBSIZ MAX_CANON
25564#define MAXPATHLEN PATH_MAX
25565#define NODEV ((dev_t) -1)
25566#define DEV_BSIZE 512
25567#define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
25568#define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
25569#define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
25570#define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
25571#define howmany(x,y) (((x) + ((y) - 1)) / (y))
25572#define roundup(x,y) (__builtin_constant_p (y) && powerof2 (y) ? (((x) + (y) - 1) & ~((y) - 1)) : ((((x) + ((y) - 1)) / (y)) * (y)))
25573#define powerof2(x) ((((x) - 1) & (x)) == 0)
25574#define MIN(a,b) (((a)<(b))?(a):(b))
25575#define MAX(a,b) (((a)>(b))?(a):(b))
25576#define SAVE_ROOT_JMPBUF(th,stmt) do if (true) { stmt; } else if (th) { } while (0)
25577#define EC_PUSH_TAG(ec) do { rb_execution_context_t * const _ec = (ec); struct rb_vm_tag _tag; _tag.state = TAG_NONE; _tag.tag = Qundef; _tag.prev = _ec->tag; _tag.lock_rec = rb_ec_vm_lock_rec(_ec);
25578#define EC_POP_TAG() _ec->tag = _tag.prev; } while (0)
25579#define EC_TMPPOP_TAG() _ec->tag = _tag.prev
25580#define EC_REPUSH_TAG() (void)(_ec->tag = &_tag)
25581#define VAR_FROM_MEMORY(var) (var)
25582#define VAR_INITIALIZED(var) ((void)&(var))
25583#define VAR_NOCLOBBERED(var) var
25584#define EC_EXEC_TAG() (ruby_setjmp(_tag.buf) ? rb_ec_tag_state(VAR_FROM_MEMORY(_ec)) : (EC_REPUSH_TAG(), 0))
25585#define EC_JUMP_TAG(ec,st) rb_ec_tag_jump(ec, st)
25586#define INTERNAL_EXCEPTION_P(exc) FIXNUM_P(exc)
25587#define CREF_FL_PUSHED_BY_EVAL IMEMO_FL_USER1
25588#define CREF_FL_OMOD_SHARED IMEMO_FL_USER2
25589#define CREF_FL_SINGLETON IMEMO_FL_USER3
25590#pragma GCC diagnostic push
25591#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
25592#pragma GCC diagnostic pop
25593#define rb_ec_raised_set(ec,f) ((ec)->raised_flag |= (f))
25594#define rb_ec_raised_reset(ec,f) ((ec)->raised_flag &= ~(f))
25595#define rb_ec_raised_p(ec,f) (((ec)->raised_flag & (f)) != 0)
25596#define rb_ec_raised_clear(ec) ((ec)->raised_flag = 0)
25597#define CharNext(p) rb_char_next(p)
25598#define RUBY_GC_H 1
25599#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movq\t%%rsp, %0" : "=r" (*(p)))
25600#define RB_GC_SAVE_MACHINE_CONTEXT(th) do { FLUSH_REGISTER_WINDOWS; setjmp((th)->ec->machine.regs); SET_MACHINE_STACK_END(&(th)->ec->machine.stack_end); } while (0)
25601#define RUBY_MARK_FREE_DEBUG 0
25602#define RUBY_MARK_ENTER(msg)
25603#define RUBY_MARK_LEAVE(msg)
25604#define RUBY_FREE_ENTER(msg)
25605#define RUBY_FREE_LEAVE(msg)
25606#define RUBY_GC_INFO if(0)printf
25607#define RUBY_MARK_MOVABLE_UNLESS_NULL(ptr) do { VALUE markobj = (ptr); if (RTEST(markobj)) {rb_gc_mark_movable(markobj);} } while (0)
25608#define RUBY_MARK_UNLESS_NULL(ptr) do { VALUE markobj = (ptr); if (RTEST(markobj)) {rb_gc_mark(markobj);} } while (0)
25609#define RUBY_FREE_UNLESS_NULL(ptr) if(ptr){ruby_xfree(ptr);(ptr)=NULL;}
25610#define STACK_UPPER(x,a,b) (b)
25611#define STACK_GROW_DIR_DETECTION
25612#define STACK_DIR_UPPER(a,b) STACK_UPPER(0, (a), (b))
25613#define IS_STACK_DIR_UPPER() STACK_DIR_UPPER(1,0)
25614#pragma GCC visibility push(default)
25615#pragma GCC visibility pop
25616#define INTERNAL_COMPILE_H
25617#pragma GCC visibility push(default)
25618#pragma GCC visibility pop
25619#define INTERNAL_CONT_H
25620#define INTERNAL_ERROR_H
25621#define INTERNAL_STRING_H
25622#define RUBY_ENCODING_H 1
25623#define RUBY_INTERNAL_ENCODING_CODERANGE_H
25624#pragma GCC visibility push(default)
25625#define ENC_CODERANGE_MASK RUBY_ENC_CODERANGE_MASK
25626#define ENC_CODERANGE_UNKNOWN RUBY_ENC_CODERANGE_UNKNOWN
25627#define ENC_CODERANGE_7BIT RUBY_ENC_CODERANGE_7BIT
25628#define ENC_CODERANGE_VALID RUBY_ENC_CODERANGE_VALID
25629#define ENC_CODERANGE_BROKEN RUBY_ENC_CODERANGE_BROKEN
25630#define ENC_CODERANGE_CLEAN_P(cr) RB_ENC_CODERANGE_CLEAN_P(cr)
25631#define ENC_CODERANGE(obj) RB_ENC_CODERANGE(obj)
25632#define ENC_CODERANGE_ASCIIONLY(obj) RB_ENC_CODERANGE_ASCIIONLY(obj)
25633#define ENC_CODERANGE_SET(obj,cr) RB_ENC_CODERANGE_SET(obj,cr)
25634#define ENC_CODERANGE_CLEAR(obj) RB_ENC_CODERANGE_CLEAR(obj)
25635#define ENC_CODERANGE_AND(a,b) RB_ENC_CODERANGE_AND(a, b)
25636#define ENCODING_CODERANGE_SET(obj,encindex,cr) RB_ENCODING_CODERANGE_SET(obj, encindex, cr)
25637#define RB_ENC_CODERANGE RB_ENC_CODERANGE
25638#define RB_ENC_CODERANGE_AND RB_ENC_CODERANGE_AND
25639#define RB_ENC_CODERANGE_ASCIIONLY RB_ENC_CODERANGE_ASCIIONLY
25640#define RB_ENC_CODERANGE_CLEAN_P RB_ENC_CODERANGE_CLEAN_P
25641#define RB_ENC_CODERANGE_CLEAR RB_ENC_CODERANGE_CLEAR
25642#define RB_ENC_CODERANGE_SET RB_ENC_CODERANGE_SET
25643#pragma GCC visibility pop
25644#define RUBY_INTERNAL_ENCODING_CTYPE_H
25645#define ONIGMO_H
25646#define ONIGMO_VERSION_MAJOR 6
25647#define ONIGMO_VERSION_MINOR 1
25648#define ONIGMO_VERSION_TEENY 3
25649#define ONIG_EXTERN RUBY_EXTERN
25650#pragma GCC visibility push(default)
25651#define UChar OnigUChar
25652#define ONIG_INFINITE_DISTANCE ~((OnigDistance )0)
25653#define OnigCodePointMaskWidth 3
25654#define OnigCodePointMask ((1<<OnigCodePointMaskWidth)-1)
25655#define OnigCodePointCount(n) ((n)&OnigCodePointMask)
25656#define OnigCaseFoldFlags(n) ((n)&~OnigCodePointMask)
25657#define OnigSpecialIndexShift 3
25658#define OnigSpecialIndexWidth 10
25659#define ONIGENC_CASE_UPCASE (1<<13)
25660#define ONIGENC_CASE_DOWNCASE (1<<14)
25661#define ONIGENC_CASE_TITLECASE (1<<15)
25662#define ONIGENC_CASE_SPECIAL_OFFSET 3
25663#define ONIGENC_CASE_UP_SPECIAL (1<<16)
25664#define ONIGENC_CASE_DOWN_SPECIAL (1<<17)
25665#define ONIGENC_CASE_MODIFIED (1<<18)
25666#define ONIGENC_CASE_FOLD (1<<19)
25667#define ONIGENC_CASE_FOLD_TURKISH_AZERI (1<<20)
25668#define ONIGENC_CASE_FOLD_LITHUANIAN (1<<21)
25669#define ONIGENC_CASE_ASCII_ONLY (1<<22)
25670#define ONIGENC_CASE_IS_TITLECASE (1<<23)
25671#define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR (1<<30)
25672#define ONIGENC_CASE_FOLD_MIN INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR
25673#define ONIGENC_CASE_FOLD_DEFAULT OnigDefaultCaseFoldFlag
25674#define ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN 3
25675#define ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM 13
25676#define ONIGENC_CODE_RANGE_NUM(range) ((int )range[0])
25677#define ONIGENC_CODE_RANGE_FROM(range,i) range[((i)*2) + 1]
25678#define ONIGENC_CODE_RANGE_TO(range,i) range[((i)*2) + 2]
25679#define ONIG_ENCODING_ASCII (&OnigEncodingASCII)
25680#define ONIG_ENCODING_UNDEF ((OnigEncoding )0)
25681#define ONIGENC_CODE_TO_MBC_MAXLEN 7
25682#define ONIGENC_MBC_CASE_FOLD_MAXLEN 18
25683#define ONIGENC_CTYPE_NEWLINE 0
25684#define ONIGENC_CTYPE_ALPHA 1
25685#define ONIGENC_CTYPE_BLANK 2
25686#define ONIGENC_CTYPE_CNTRL 3
25687#define ONIGENC_CTYPE_DIGIT 4
25688#define ONIGENC_CTYPE_GRAPH 5
25689#define ONIGENC_CTYPE_LOWER 6
25690#define ONIGENC_CTYPE_PRINT 7
25691#define ONIGENC_CTYPE_PUNCT 8
25692#define ONIGENC_CTYPE_SPACE 9
25693#define ONIGENC_CTYPE_UPPER 10
25694#define ONIGENC_CTYPE_XDIGIT 11
25695#define ONIGENC_CTYPE_WORD 12
25696#define ONIGENC_CTYPE_ALNUM 13
25697#define ONIGENC_CTYPE_ASCII 14
25698#define ONIGENC_MAX_STD_CTYPE ONIGENC_CTYPE_ASCII
25699#define ONIGENC_FLAG_NONE 0U
25700#define ONIGENC_FLAG_UNICODE 1U
25701#define onig_enc_len(enc,p,e) ONIGENC_MBC_ENC_LEN(enc, p, e)
25702#define ONIGENC_IS_UNDEF(enc) ((enc) == ONIG_ENCODING_UNDEF)
25703#define ONIGENC_IS_SINGLEBYTE(enc) (ONIGENC_MBC_MAXLEN(enc) == 1)
25704#define ONIGENC_IS_MBC_HEAD(enc,p,e) (ONIGENC_MBC_ENC_LEN(enc,p,e) != 1)
25705#define ONIGENC_IS_MBC_ASCII(p) (*(p) < 128)
25706#define ONIGENC_IS_CODE_ASCII(code) ((code) < 128)
25707#define ONIGENC_IS_MBC_WORD(enc,s,end) ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))
25708#define ONIGENC_IS_MBC_ASCII_WORD(enc,s,end) onigenc_ascii_is_code_ctype( ONIGENC_MBC_TO_CODE(enc,s,end),ONIGENC_CTYPE_WORD,enc)
25709#define ONIGENC_IS_UNICODE(enc) ((enc)->flags & ONIGENC_FLAG_UNICODE)
25710#define ONIGENC_NAME(enc) ((enc)->name)
25711#define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf,enc)
25712#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) (enc)->is_allowed_reverse_match(s,end,enc)
25713#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s,end) (enc)->left_adjust_char_head(start, s, end, enc)
25714#define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) (enc)->apply_all_case_fold(case_fold_flag,f,arg,enc)
25715#define ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc,case_fold_flag,p,end,acs) (enc)->get_case_fold_codes_by_str(case_fold_flag,p,end,acs,enc)
25716#define ONIGENC_STEP_BACK(enc,start,s,end,n) onigenc_step_back((enc),(start),(s),(end),(n))
25717#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n) (n)
25718#define ONIGENC_MBCLEN_CHARFOUND_P(r) (0 < (r))
25719#define ONIGENC_MBCLEN_CHARFOUND_LEN(r) (r)
25720#define ONIGENC_CONSTRUCT_MBCLEN_INVALID() (-1)
25721#define ONIGENC_MBCLEN_INVALID_P(r) ((r) == -1)
25722#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n) (-1-(n))
25723#define ONIGENC_MBCLEN_NEEDMORE_P(r) ((r) < -1)
25724#define ONIGENC_MBCLEN_NEEDMORE_LEN(r) (-1-(r))
25725#define ONIGENC_PRECISE_MBC_ENC_LEN(enc,p,e) (enc)->precise_mbc_enc_len(p,e,enc)
25726#define ONIGENC_MBC_ENC_LEN(enc,p,e) onigenc_mbclen_approximate(p,e,enc)
25727#define ONIGENC_MBC_MAXLEN(enc) ((enc)->max_enc_len)
25728#define ONIGENC_MBC_MAXLEN_DIST(enc) ONIGENC_MBC_MAXLEN(enc)
25729#define ONIGENC_MBC_MINLEN(enc) ((enc)->min_enc_len)
25730#define ONIGENC_IS_MBC_NEWLINE(enc,p,end) (enc)->is_mbc_newline((p),(end),enc)
25731#define ONIGENC_MBC_TO_CODE(enc,p,end) (enc)->mbc_to_code((p),(end),enc)
25732#define ONIGENC_CODE_TO_MBCLEN(enc,code) (enc)->code_to_mbclen(code,enc)
25733#define ONIGENC_CODE_TO_MBC(enc,code,buf) (enc)->code_to_mbc(code,buf,enc)
25734#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) (enc)->property_name_to_ctype(enc,p,end)
25735#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) (enc)->is_code_ctype(code,ctype,enc)
25736#define ONIGENC_IS_CODE_NEWLINE(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE)
25737#define ONIGENC_IS_CODE_GRAPH(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH)
25738#define ONIGENC_IS_CODE_PRINT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT)
25739#define ONIGENC_IS_CODE_ALNUM(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM)
25740#define ONIGENC_IS_CODE_ALPHA(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA)
25741#define ONIGENC_IS_CODE_LOWER(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER)
25742#define ONIGENC_IS_CODE_UPPER(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER)
25743#define ONIGENC_IS_CODE_CNTRL(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL)
25744#define ONIGENC_IS_CODE_PUNCT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT)
25745#define ONIGENC_IS_CODE_SPACE(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE)
25746#define ONIGENC_IS_CODE_BLANK(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK)
25747#define ONIGENC_IS_CODE_DIGIT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
25748#define ONIGENC_IS_CODE_XDIGIT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)
25749#define ONIGENC_IS_CODE_WORD(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
25750#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) (enc)->get_ctype_code_range(ctype,sbout,ranges,enc)
25751#define ONIG_NREGION 4
25752#define ONIG_MAX_CAPTURE_GROUP_NUM 32767
25753#define ONIG_MAX_BACKREF_NUM 1000
25754#define ONIG_MAX_REPEAT_NUM 100000
25755#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000
25756#define ONIG_MAX_ERROR_MESSAGE_LEN 90
25757#define ONIG_OPTION_DEFAULT ONIG_OPTION_NONE
25758#define ONIG_OPTION_NONE 0U
25759#define ONIG_OPTION_IGNORECASE 1U
25760#define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1)
25761#define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1)
25762#define ONIG_OPTION_DOTALL ONIG_OPTION_MULTILINE
25763#define ONIG_OPTION_SINGLELINE (ONIG_OPTION_MULTILINE << 1)
25764#define ONIG_OPTION_FIND_LONGEST (ONIG_OPTION_SINGLELINE << 1)
25765#define ONIG_OPTION_FIND_NOT_EMPTY (ONIG_OPTION_FIND_LONGEST << 1)
25766#define ONIG_OPTION_NEGATE_SINGLELINE (ONIG_OPTION_FIND_NOT_EMPTY << 1)
25767#define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1)
25768#define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
25769#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1)
25770#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1)
25771#define ONIG_OPTION_NOTBOS (ONIG_OPTION_NOTEOL << 1)
25772#define ONIG_OPTION_NOTEOS (ONIG_OPTION_NOTBOS << 1)
25773#define ONIG_OPTION_ASCII_RANGE (ONIG_OPTION_NOTEOS << 1)
25774#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1)
25775#define ONIG_OPTION_WORD_BOUND_ALL_RANGE (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1)
25776#define ONIG_OPTION_NEWLINE_CRLF (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1)
25777#define ONIG_OPTION_MAXBIT ONIG_OPTION_NEWLINE_CRLF
25778#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt))
25779#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt))
25780#define ONIG_IS_OPTION_ON(options,option) ((options) & (option))
25781#define ONIG_SYNTAX_ASIS (&OnigSyntaxASIS)
25782#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic)
25783#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended)
25784#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs)
25785#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep)
25786#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex)
25787#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava)
25788#define ONIG_SYNTAX_PERL58 (&OnigSyntaxPerl58)
25789#define ONIG_SYNTAX_PERL58_NG (&OnigSyntaxPerl58_NG)
25790#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl)
25791#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby)
25792#define ONIG_SYNTAX_PYTHON (&OnigSyntaxPython)
25793#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax
25794#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS (1U<<0)
25795#define ONIG_SYN_OP_DOT_ANYCHAR (1U<<1)
25796#define ONIG_SYN_OP_ASTERISK_ZERO_INF (1U<<2)
25797#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (1U<<3)
25798#define ONIG_SYN_OP_PLUS_ONE_INF (1U<<4)
25799#define ONIG_SYN_OP_ESC_PLUS_ONE_INF (1U<<5)
25800#define ONIG_SYN_OP_QMARK_ZERO_ONE (1U<<6)
25801#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (1U<<7)
25802#define ONIG_SYN_OP_BRACE_INTERVAL (1U<<8)
25803#define ONIG_SYN_OP_ESC_BRACE_INTERVAL (1U<<9)
25804#define ONIG_SYN_OP_VBAR_ALT (1U<<10)
25805#define ONIG_SYN_OP_ESC_VBAR_ALT (1U<<11)
25806#define ONIG_SYN_OP_LPAREN_SUBEXP (1U<<12)
25807#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP (1U<<13)
25808#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (1U<<14)
25809#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (1U<<15)
25810#define ONIG_SYN_OP_DECIMAL_BACKREF (1U<<16)
25811#define ONIG_SYN_OP_BRACKET_CC (1U<<17)
25812#define ONIG_SYN_OP_ESC_W_WORD (1U<<18)
25813#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (1U<<19)
25814#define ONIG_SYN_OP_ESC_B_WORD_BOUND (1U<<20)
25815#define ONIG_SYN_OP_ESC_S_WHITE_SPACE (1U<<21)
25816#define ONIG_SYN_OP_ESC_D_DIGIT (1U<<22)
25817#define ONIG_SYN_OP_LINE_ANCHOR (1U<<23)
25818#define ONIG_SYN_OP_POSIX_BRACKET (1U<<24)
25819#define ONIG_SYN_OP_QMARK_NON_GREEDY (1U<<25)
25820#define ONIG_SYN_OP_ESC_CONTROL_CHARS (1U<<26)
25821#define ONIG_SYN_OP_ESC_C_CONTROL (1U<<27)
25822#define ONIG_SYN_OP_ESC_OCTAL3 (1U<<28)
25823#define ONIG_SYN_OP_ESC_X_HEX2 (1U<<29)
25824#define ONIG_SYN_OP_ESC_X_BRACE_HEX8 (1U<<30)
25825#define ONIG_SYN_OP_ESC_O_BRACE_OCTAL (1U<<31)
25826#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (1U<<0)
25827#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT (1U<<1)
25828#define ONIG_SYN_OP2_OPTION_PERL (1U<<2)
25829#define ONIG_SYN_OP2_OPTION_RUBY (1U<<3)
25830#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (1U<<4)
25831#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (1U<<5)
25832#define ONIG_SYN_OP2_CCLASS_SET_OP (1U<<6)
25833#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (1U<<7)
25834#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (1U<<8)
25835#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (1U<<9)
25836#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (1U<<10)
25837#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (1U<<11)
25838#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (1U<<12)
25839#define ONIG_SYN_OP2_ESC_V_VTAB (1U<<13)
25840#define ONIG_SYN_OP2_ESC_U_HEX4 (1U<<14)
25841#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (1U<<15)
25842#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY (1U<<16)
25843#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17)
25844#define ONIG_SYN_OP2_ESC_H_XDIGIT (1U<<19)
25845#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (1U<<20)
25846#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK (1U<<21)
25847#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER (1U<<22)
25848#define ONIG_SYN_OP2_ESC_V_VERTICAL_WHITESPACE (1U<<23)
25849#define ONIG_SYN_OP2_ESC_H_HORIZONTAL_WHITESPACE (1U<<24)
25850#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP (1U<<25)
25851#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF (1U<<26)
25852#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL (1U<<27)
25853#define ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET (1U<<28)
25854#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION (1U<<29)
25855#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP (1U<<30)
25856#define ONIG_SYN_OP2_QMARK_TILDE_ABSENT (1U<<31)
25857#define ONIG_SYN_CONTEXT_INDEP_ANCHORS (1U<<31)
25858#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS (1U<<0)
25859#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS (1U<<1)
25860#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP (1U<<2)
25861#define ONIG_SYN_ALLOW_INVALID_INTERVAL (1U<<3)
25862#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV (1U<<4)
25863#define ONIG_SYN_STRICT_CHECK_BACKREF (1U<<5)
25864#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (1U<<6)
25865#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (1U<<7)
25866#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8)
25867#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (1U<<9)
25868#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL (1U<<10)
25869#define ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP (1U<<11)
25870#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1U<<20)
25871#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (1U<<21)
25872#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (1U<<22)
25873#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (1U<<23)
25874#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (1U<<24)
25875#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (1U<<25)
25876#define ONIG_SYN_WARN_CC_DUP (1U<<26)
25877#define ONIG_META_CHAR_ESCAPE 0
25878#define ONIG_META_CHAR_ANYCHAR 1
25879#define ONIG_META_CHAR_ANYTIME 2
25880#define ONIG_META_CHAR_ZERO_OR_ONE_TIME 3
25881#define ONIG_META_CHAR_ONE_OR_MORE_TIME 4
25882#define ONIG_META_CHAR_ANYCHAR_ANYTIME 5
25883#define ONIG_INEFFECTIVE_META_CHAR 0
25884#define ONIG_IS_PATTERN_ERROR(ecode) ((ecode) <= -100 && (ecode) > -1000)
25885#define ONIG_NORMAL 0
25886#define ONIG_MISMATCH -1
25887#define ONIG_NO_SUPPORT_CONFIG -2
25888#define ONIGERR_MEMORY -5
25889#define ONIGERR_TYPE_BUG -6
25890#define ONIGERR_PARSER_BUG -11
25891#define ONIGERR_STACK_BUG -12
25892#define ONIGERR_UNDEFINED_BYTECODE -13
25893#define ONIGERR_UNEXPECTED_BYTECODE -14
25894#define ONIGERR_MATCH_STACK_LIMIT_OVER -15
25895#define ONIGERR_PARSE_DEPTH_LIMIT_OVER -16
25896#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SET -21
25897#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22
25898#define ONIGERR_INVALID_ARGUMENT -30
25899#define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100
25900#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101
25901#define ONIGERR_EMPTY_CHAR_CLASS -102
25902#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS -103
25903#define ONIGERR_END_PATTERN_AT_ESCAPE -104
25904#define ONIGERR_END_PATTERN_AT_META -105
25905#define ONIGERR_END_PATTERN_AT_CONTROL -106
25906#define ONIGERR_META_CODE_SYNTAX -108
25907#define ONIGERR_CONTROL_CODE_SYNTAX -109
25908#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE -110
25909#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE -111
25910#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS -112
25911#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED -113
25912#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID -114
25913#define ONIGERR_NESTED_REPEAT_OPERATOR -115
25914#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS -116
25915#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS -117
25916#define ONIGERR_END_PATTERN_IN_GROUP -118
25917#define ONIGERR_UNDEFINED_GROUP_OPTION -119
25918#define ONIGERR_INVALID_POSIX_BRACKET_TYPE -121
25919#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN -122
25920#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN -123
25921#define ONIGERR_INVALID_CONDITION_PATTERN -124
25922#define ONIGERR_TOO_BIG_NUMBER -200
25923#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE -201
25924#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE -202
25925#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS -203
25926#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE -204
25927#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES -205
25928#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING -206
25929#define ONIGERR_TOO_BIG_BACKREF_NUMBER -207
25930#define ONIGERR_INVALID_BACKREF -208
25931#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209
25932#define ONIGERR_TOO_MANY_CAPTURE_GROUPS -210
25933#define ONIGERR_TOO_SHORT_DIGITS -211
25934#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212
25935#define ONIGERR_EMPTY_GROUP_NAME -214
25936#define ONIGERR_INVALID_GROUP_NAME -215
25937#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME -216
25938#define ONIGERR_UNDEFINED_NAME_REFERENCE -217
25939#define ONIGERR_UNDEFINED_GROUP_REFERENCE -218
25940#define ONIGERR_MULTIPLEX_DEFINED_NAME -219
25941#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL -220
25942#define ONIGERR_NEVER_ENDING_RECURSION -221
25943#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222
25944#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223
25945#define ONIGERR_INVALID_CODE_POINT_VALUE -400
25946#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400
25947#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401
25948#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION -402
25949#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS -403
25950#define ONIG_MAX_CAPTURE_HISTORY_GROUP 31
25951#define ONIG_IS_CAPTURE_HISTORY_GROUP(r,i) ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])
25952#define ONIG_TRAVERSE_CALLBACK_AT_FIRST 1
25953#define ONIG_TRAVERSE_CALLBACK_AT_LAST 2
25954#define ONIG_TRAVERSE_CALLBACK_AT_BOTH ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST )
25955#define ONIG_REGION_NOTPOS -1
25956#define ONIG_NULL_WARN onig_null_warn
25957#define ONIG_CHAR_TABLE_SIZE 256
25958#pragma GCC visibility pop
25959#define RUBY_INTERNAL_ENCODING_ENCODING_H
25960#define ONIGURUMA_H
25961#define ONIGURUMA
25962#define ONIGURUMA_VERSION_MAJOR ONIGMO_VERSION_MAJOR
25963#define ONIGURUMA_VERSION_MINOR ONIGMO_VERSION_MINOR
25964#define ONIGURUMA_VERSION_TEENY ONIGMO_VERSION_TEENY
25965#pragma GCC visibility push(default)
25966#define ENCODING_INLINE_MAX RUBY_ENCODING_INLINE_MAX
25967#define ENCODING_SHIFT RUBY_ENCODING_SHIFT
25968#define ENCODING_MASK RUBY_ENCODING_MASK
25969#define ENCODING_SET_INLINED(obj,i) RB_ENCODING_SET_INLINED(obj,i)
25970#define ENCODING_SET(obj,i) RB_ENCODING_SET(obj,i)
25971#define ENCODING_GET_INLINED(obj) RB_ENCODING_GET_INLINED(obj)
25972#define ENCODING_GET(obj) RB_ENCODING_GET(obj)
25973#define ENCODING_IS_ASCII8BIT(obj) RB_ENCODING_IS_ASCII8BIT(obj)
25974#define ENCODING_MAXNAMELEN RUBY_ENCODING_MAXNAMELEN
25975#define MBCLEN_CHARFOUND_P(ret) ONIGENC_MBCLEN_CHARFOUND_P(ret)
25976#define MBCLEN_CHARFOUND_LEN(ret) ONIGENC_MBCLEN_CHARFOUND_LEN(ret)
25977#define MBCLEN_INVALID_P(ret) ONIGENC_MBCLEN_INVALID_P(ret)
25978#define MBCLEN_NEEDMORE_P(ret) ONIGENC_MBCLEN_NEEDMORE_P(ret)
25979#define MBCLEN_NEEDMORE_LEN(ret) ONIGENC_MBCLEN_NEEDMORE_LEN(ret)
25980#pragma GCC visibility pop
25981#define RB_ENCODING_GET RB_ENCODING_GET
25982#define RB_ENCODING_GET_INLINED RB_ENCODING_GET_INLINED
25983#define RB_ENCODING_IS_ASCII8BIT RB_ENCODING_IS_ASCII8BIT
25984#define RB_ENCODING_SET RB_ENCODING_SET
25985#define RB_ENCODING_SET_INLINED RB_ENCODING_SET_INLINED
25986#define rb_enc_asciicompat rb_enc_asciicompat
25987#define rb_enc_code_to_mbclen rb_enc_code_to_mbclen
25988#define rb_enc_codepoint rb_enc_codepoint
25989#define rb_enc_left_char_head rb_enc_left_char_head
25990#define rb_enc_mbc_to_codepoint rb_enc_mbc_to_codepoint
25991#define rb_enc_mbcput rb_enc_mbcput
25992#define rb_enc_mbmaxlen rb_enc_mbmaxlen
25993#define rb_enc_mbminlen rb_enc_mbminlen
25994#define rb_enc_name rb_enc_name
25995#define rb_enc_prev_char rb_enc_prev_char
25996#define rb_enc_right_char_head rb_enc_right_char_head
25997#define rb_enc_step_back rb_enc_step_back
25998#define rb_enc_str_asciicompat_p rb_enc_str_asciicompat_p
25999#pragma GCC visibility push(default)
26000#pragma GCC visibility pop
26001#define rb_enc_is_newline rb_enc_is_newline
26002#define rb_enc_isalnum rb_enc_isalnum
26003#define rb_enc_isalpha rb_enc_isalpha
26004#define rb_enc_isascii rb_enc_isascii
26005#define rb_enc_isctype rb_enc_isctype
26006#define rb_enc_isdigit rb_enc_isdigit
26007#define rb_enc_islower rb_enc_islower
26008#define rb_enc_isprint rb_enc_isprint
26009#define rb_enc_ispunct rb_enc_ispunct
26010#define rb_enc_isspace rb_enc_isspace
26011#define rb_enc_isupper rb_enc_isupper
26012#define RUBY_INTERNAL_ENCODING_PATHNAME_H
26013#pragma GCC visibility push(default)
26014#pragma GCC visibility pop
26015#define RUBY_INTERNAL_ENCODING_RE_H
26016#pragma GCC visibility push(default)
26017#pragma GCC visibility pop
26018#define RUBY_INTERNAL_ENCODING_SPRINTF_H
26019#pragma GCC visibility push(default)
26020#pragma GCC visibility pop
26021#define RUBY_INTERNAL_ENCODING_STRING_H
26022#pragma GCC visibility push(default)
26023#define rb_enc_str_new(str,len,enc) ((RBIMPL_CONSTANT_P(str) && RBIMPL_CONSTANT_P(len) ? rb_enc_str_new_static: rb_enc_str_new) ((str), (len), (enc)))
26024#define rb_enc_str_new_cstr(str,enc) ((RBIMPL_CONSTANT_P(str) ? rbimpl_enc_str_new_cstr : rb_enc_str_new_cstr) ((str), (enc)))
26025#pragma GCC visibility pop
26026#define RUBY_INTERNAL_ENCODING_SYMBOL_H
26027#pragma GCC visibility push(default)
26028#pragma GCC visibility pop
26029#define RUBY_INTERNAL_ENCODING_TRANSCODE_H
26030#pragma GCC visibility push(default)
26031#define ECONV_ERROR_HANDLER_MASK RUBY_ECONV_ERROR_HANDLER_MASK
26032#define ECONV_INVALID_MASK RUBY_ECONV_INVALID_MASK
26033#define ECONV_INVALID_REPLACE RUBY_ECONV_INVALID_REPLACE
26034#define ECONV_UNDEF_MASK RUBY_ECONV_UNDEF_MASK
26035#define ECONV_UNDEF_REPLACE RUBY_ECONV_UNDEF_REPLACE
26036#define ECONV_UNDEF_HEX_CHARREF RUBY_ECONV_UNDEF_HEX_CHARREF
26037#define ECONV_DECORATOR_MASK RUBY_ECONV_DECORATOR_MASK
26038#define ECONV_NEWLINE_DECORATOR_MASK RUBY_ECONV_NEWLINE_DECORATOR_MASK
26039#define ECONV_NEWLINE_DECORATOR_READ_MASK RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK
26040#define ECONV_NEWLINE_DECORATOR_WRITE_MASK RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK
26041#define ECONV_UNIVERSAL_NEWLINE_DECORATOR RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR
26042#define ECONV_CRLF_NEWLINE_DECORATOR RUBY_ECONV_CRLF_NEWLINE_DECORATOR
26043#define ECONV_CR_NEWLINE_DECORATOR RUBY_ECONV_CR_NEWLINE_DECORATOR
26044#define ECONV_XML_TEXT_DECORATOR RUBY_ECONV_XML_TEXT_DECORATOR
26045#define ECONV_XML_ATTR_CONTENT_DECORATOR RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR
26046#define ECONV_STATEFUL_DECORATOR_MASK RUBY_ECONV_STATEFUL_DECORATOR_MASK
26047#define ECONV_XML_ATTR_QUOTE_DECORATOR RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR
26048#define ECONV_DEFAULT_NEWLINE_DECORATOR RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR
26049#define ECONV_PARTIAL_INPUT RUBY_ECONV_PARTIAL_INPUT
26050#define ECONV_AFTER_OUTPUT RUBY_ECONV_AFTER_OUTPUT
26051#pragma GCC visibility pop
26052#define STR_NOEMBED FL_USER1
26053#define STR_SHARED FL_USER2
26054#undef rb_fstring_cstr
26055#pragma GCC visibility push(default)
26056#pragma GCC visibility pop
26057#pragma GCC visibility push(default)
26058#pragma GCC visibility pop
26059#define rb_fstring_lit(str) rb_fstring_new((str), rb_strlen_lit(str))
26060#define rb_fstring_literal(str) rb_fstring_lit(str)
26061#define rb_fstring_enc_lit(str,enc) rb_fstring_enc_new((str), rb_strlen_lit(str), (enc))
26062#define rb_fstring_enc_literal(str,enc) rb_fstring_enc_lit(str, enc)
26063#define rb_fstring_cstr(str) (__builtin_constant_p(str) ? rb_fstring_new((str), (long)strlen(str)) : (rb_fstring_cstr)(str))
26064#undef Check_Type
26065#define rb_raise_static(e,m) rb_raise_cstr_i((e), rb_str_new_static((m), rb_strlen_lit(m)))
26066#define rb_sys_fail_path(path) rb_sys_fail_path_in(RUBY_FUNCTION_NAME_STRING, path)
26067#define rb_syserr_fail_path(err,path) rb_syserr_fail_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
26068#define rb_syserr_new_path(err,path) rb_syserr_new_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
26069#define rb_warn_deprecated_to_remove_at(removal,...) rb_warn_deprecated_to_remove(#removal, __VA_ARGS__)
26070#define RUBY_VERSION_SINCE(major,minor) 0
26071#define RUBY_VERSION_BEFORE(major,minor) 0
26072#define RBIMPL_TODO0(x)
26073#define RBIMPL_TODO(message) RBIMPL_TODO0("TODO: " message)
26074#define rb_typeddata_is_instance_of rb_typeddata_is_instance_of_inline
26075#pragma GCC visibility push(default)
26076#pragma GCC visibility pop
26077#define INTERNAL_EVAL_H
26078#define id_signo ruby_static_id_signo
26079#define id_status ruby_static_id_status
26080#define INTERNAL_INITS_H
26081#define INTERNAL_OBJECT_H
26082#define INTERNAL_CLASS_H
26083#define RUBY_ID_TABLE_H 1
26084#define RCLASS_EXT(c) (RCLASS(c)->ptr)
26085#define RCLASS_IV_TBL(c) (RCLASS_EXT(c)->iv_tbl)
26086#define RCLASS_CONST_TBL(c) (RCLASS_EXT(c)->const_tbl)
26087#define RCLASS_M_TBL(c) (RCLASS_EXT(c)->m_tbl)
26088#define RCLASS_CALLABLE_M_TBL(c) (RCLASS_EXT(c)->callable_m_tbl)
26089#define RCLASS_CC_TBL(c) (RCLASS_EXT(c)->cc_tbl)
26090#define RCLASS_CVC_TBL(c) (RCLASS_EXT(c)->cvc_tbl)
26091#define RCLASS_IV_INDEX_TBL(c) (RCLASS_EXT(c)->iv_index_tbl)
26092#define RCLASS_ORIGIN(c) (RCLASS_EXT(c)->origin_)
26093#define RCLASS_REFINED_CLASS(c) (RCLASS_EXT(c)->refined_class)
26094#define RCLASS_SERIAL(c) (RCLASS(c)->class_serial)
26095#define RCLASS_INCLUDER(c) (RCLASS_EXT(c)->includer)
26096#define RCLASS_SUBCLASS_ENTRY(c) (RCLASS_EXT(c)->subclass_entry)
26097#define RCLASS_MODULE_SUBCLASS_ENTRY(c) (RCLASS_EXT(c)->module_subclass_entry)
26098#define RCLASS_ALLOCATOR(c) (RCLASS_EXT(c)->allocator)
26099#define RCLASS_SUBCLASSES(c) (RCLASS_EXT(c)->subclasses)
26100#define RCLASS_SUPERCLASS_DEPTH(c) (RCLASS_EXT(c)->superclass_depth)
26101#define RCLASS_SUPERCLASSES(c) (RCLASS_EXT(c)->superclasses)
26102#define RICLASS_IS_ORIGIN FL_USER5
26103#define RCLASS_CLONED FL_USER6
26104#define RICLASS_ORIGIN_SHARED_MTBL FL_USER8
26105#pragma GCC visibility push(default)
26106#pragma GCC visibility pop
26107#pragma GCC diagnostic push
26108#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26109#pragma GCC diagnostic pop
26110#pragma GCC diagnostic push
26111#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26112#pragma GCC diagnostic pop
26113#pragma GCC diagnostic push
26114#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26115#pragma GCC diagnostic pop
26116#pragma GCC visibility push(default)
26117#pragma GCC visibility pop
26118#pragma GCC visibility push(default)
26119#pragma GCC visibility pop
26120#define ROBJECT_IV_INDEX_TBL ROBJECT_IV_INDEX_TBL_inline
26121#define INTERNAL_PARSE_H
26122#pragma GCC visibility push(default)
26123#pragma GCC visibility pop
26124#define INTERNAL_PROC_H
26125#pragma GCC visibility push(default)
26126#pragma GCC visibility pop
26127#define INTERNAL_RE_H
26128#pragma GCC visibility push(default)
26129#pragma GCC visibility pop
26130#define INTERNAL_SYMBOL_H
26131#undef rb_sym_intern_ascii_cstr
26132#define rb_sym_intern_ascii_cstr(ptr) (__builtin_constant_p(ptr) ? rb_sym_intern_ascii((ptr), (long)strlen(ptr)) : rb_sym_intern_ascii_cstr(ptr))
26133#define INTERNAL_THREAD_H
26134#define COVERAGE_INDEX_LINES 0
26135#define COVERAGE_INDEX_BRANCHES 1
26136#define COVERAGE_TARGET_LINES 1
26137#define COVERAGE_TARGET_BRANCHES 2
26138#define COVERAGE_TARGET_METHODS 4
26139#define COVERAGE_TARGET_ONESHOT_LINES 8
26140#pragma GCC visibility push(default)
26141#pragma GCC visibility pop
26142#pragma GCC visibility push(default)
26143#pragma GCC visibility pop
26144#define INTERNAL_SANITIZERS_H
26145#define __MEMCHECK_H
26146#define __VALGRIND_H
26147#define __VALGRIND_MAJOR__ 3
26148#define __VALGRIND_MINOR__ 18
26149#undef PLAT_x86_darwin
26150#undef PLAT_amd64_darwin
26151#undef PLAT_x86_freebsd
26152#undef PLAT_amd64_freebsd
26153#undef PLAT_x86_win32
26154#undef PLAT_amd64_win64
26155#undef PLAT_x86_linux
26156#undef PLAT_amd64_linux
26157#undef PLAT_ppc32_linux
26158#undef PLAT_ppc64be_linux
26159#undef PLAT_ppc64le_linux
26160#undef PLAT_arm_linux
26161#undef PLAT_arm64_linux
26162#undef PLAT_s390x_linux
26163#undef PLAT_mips32_linux
26164#undef PLAT_mips64_linux
26165#undef PLAT_nanomips_linux
26166#undef PLAT_x86_solaris
26167#undef PLAT_amd64_solaris
26168#define PLAT_amd64_linux 1
26169#define VALGRIND_DO_CLIENT_REQUEST(_zzq_rlval,_zzq_default,_zzq_request,_zzq_arg1,_zzq_arg2,_zzq_arg3,_zzq_arg4,_zzq_arg5) do { (_zzq_rlval) = VALGRIND_DO_CLIENT_REQUEST_EXPR((_zzq_default), (_zzq_request), (_zzq_arg1), (_zzq_arg2), (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0)
26170#define VALGRIND_DO_CLIENT_REQUEST_STMT(_zzq_request,_zzq_arg1,_zzq_arg2,_zzq_arg3,_zzq_arg4,_zzq_arg5) do { (void) VALGRIND_DO_CLIENT_REQUEST_EXPR(0, (_zzq_request), (_zzq_arg1), (_zzq_arg2), (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0)
26171#define __SPECIAL_INSTRUCTION_PREAMBLE "rolq $3, %%rdi ; rolq $13, %%rdi\n\t" "rolq $61, %%rdi ; rolq $51, %%rdi\n\t"
26172#define VALGRIND_DO_CLIENT_REQUEST_EXPR(_zzq_default,_zzq_request,_zzq_arg1,_zzq_arg2,_zzq_arg3,_zzq_arg4,_zzq_arg5) __extension__ ({ volatile unsigned long int _zzq_args[6]; volatile unsigned long int _zzq_result; _zzq_args[0] = (unsigned long int)(_zzq_request); _zzq_args[1] = (unsigned long int)(_zzq_arg1); _zzq_args[2] = (unsigned long int)(_zzq_arg2); _zzq_args[3] = (unsigned long int)(_zzq_arg3); _zzq_args[4] = (unsigned long int)(_zzq_arg4); _zzq_args[5] = (unsigned long int)(_zzq_arg5); __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE "xchgq %%rbx,%%rbx" : "=d" (_zzq_result) : "a" (&_zzq_args[0]), "0" (_zzq_default) : "cc", "memory" ); _zzq_result; })
26173#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) { volatile OrigFn* _zzq_orig = &(_zzq_rlval); volatile unsigned long int __addr; __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE "xchgq %%rcx,%%rcx" : "=a" (__addr) : : "cc", "memory" ); _zzq_orig->nraddr = __addr; }
26174#define VALGRIND_CALL_NOREDIR_RAX __SPECIAL_INSTRUCTION_PREAMBLE "xchgq %%rdx,%%rdx\n\t"
26175#define VALGRIND_VEX_INJECT_IR() do { __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE "xchgq %%rdi,%%rdi\n\t" : : : "cc", "memory" ); } while (0)
26176#define VG_CONCAT4(_aa,_bb,_cc,_dd) _aa ##_bb ##_cc ##_dd
26177#define I_WRAP_SONAME_FNNAME_ZU(soname,fnname) VG_CONCAT4(_vgw00000ZU_,soname,_,fnname)
26178#define I_WRAP_SONAME_FNNAME_ZZ(soname,fnname) VG_CONCAT4(_vgw00000ZZ_,soname,_,fnname)
26179#define VALGRIND_GET_ORIG_FN(_lval) VALGRIND_GET_NR_CONTEXT(_lval)
26180#define I_REPLACE_SONAME_FNNAME_ZU(soname,fnname) VG_CONCAT4(_vgr00000ZU_,soname,_,fnname)
26181#define I_REPLACE_SONAME_FNNAME_ZZ(soname,fnname) VG_CONCAT4(_vgr00000ZZ_,soname,_,fnname)
26182#define CALL_FN_v_v(fnptr) do { volatile unsigned long _junk; CALL_FN_W_v(_junk,fnptr); } while (0)
26183#define CALL_FN_v_W(fnptr,arg1) do { volatile unsigned long _junk; CALL_FN_W_W(_junk,fnptr,arg1); } while (0)
26184#define CALL_FN_v_WW(fnptr,arg1,arg2) do { volatile unsigned long _junk; CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0)
26185#define CALL_FN_v_WWW(fnptr,arg1,arg2,arg3) do { volatile unsigned long _junk; CALL_FN_W_WWW(_junk,fnptr,arg1,arg2,arg3); } while (0)
26186#define CALL_FN_v_WWWW(fnptr,arg1,arg2,arg3,arg4) do { volatile unsigned long _junk; CALL_FN_W_WWWW(_junk,fnptr,arg1,arg2,arg3,arg4); } while (0)
26187#define CALL_FN_v_5W(fnptr,arg1,arg2,arg3,arg4,arg5) do { volatile unsigned long _junk; CALL_FN_W_5W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5); } while (0)
26188#define CALL_FN_v_6W(fnptr,arg1,arg2,arg3,arg4,arg5,arg6) do { volatile unsigned long _junk; CALL_FN_W_6W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6); } while (0)
26189#define CALL_FN_v_7W(fnptr,arg1,arg2,arg3,arg4,arg5,arg6,arg7) do { volatile unsigned long _junk; CALL_FN_W_7W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6,arg7); } while (0)
26190#define __CALLER_SAVED_REGS "rcx", "rdx", "rsi", "rdi", "r8", "r9", "r10", "r11"
26191#define __FRAME_POINTER ,"r"(__builtin_dwarf_cfa())
26192#define VALGRIND_CFI_PROLOGUE "movq %%rbp, %%r15\n\t" "movq %2, %%rbp\n\t" ".cfi_remember_state\n\t" ".cfi_def_cfa rbp, 0\n\t"
26193#define VALGRIND_CFI_EPILOGUE "movq %%r15, %%rbp\n\t" ".cfi_restore_state\n\t"
26194#define VALGRIND_ALIGN_STACK "movq %%rsp,%%r14\n\t" "andq $0xfffffffffffffff0,%%rsp\n\t"
26195#define VALGRIND_RESTORE_STACK "movq %%r14,%%rsp\n\t"
26196#define CALL_FN_W_v(lval,orig) do { volatile OrigFn _orig = (orig); volatile unsigned long _argvec[1]; volatile unsigned long _res; _argvec[0] = (unsigned long)_orig.nraddr; __asm__ volatile( VALGRIND_CFI_PROLOGUE VALGRIND_ALIGN_STACK "subq $128,%%rsp\n\t" "movq (%%rax), %%rax\n\t" VALGRIND_CALL_NOREDIR_RAX VALGRIND_RESTORE_STACK VALGRIND_CFI_EPILOGUE : "=a" (_res) : "a" (&_argvec[0]) __FRAME_POINTER : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" ); lval = (__typeof__(lval)) _res; } while (0)
26197#define CALL_FN_W_W(lval,orig,arg1) do { volatile OrigFn _orig = (orig); volatile unsigned long _argvec[2]; volatile unsigned long _res; _argvec[0] = (unsigned long)_orig.nraddr; _argvec[1] = (unsigned long)(arg1); __asm__ volatile( VALGRIND_CFI_PROLOGUE VALGRIND_ALIGN_STACK "subq $128,%%rsp\n\t" "movq 8(%%rax), %%rdi\n\t" "movq (%%rax), %%rax\n\t" VALGRIND_CALL_NOREDIR_RAX VALGRIND_RESTORE_STACK VALGRIND_CFI_EPILOGUE : "=a" (_res) : "a" (&_argvec[0]) __FRAME_POINTER : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" ); lval = (__typeof__(lval)) _res; } while (0)
26198#define CALL_FN_W_WW(lval,orig,arg1,arg2) do { volatile OrigFn _orig = (orig); volatile unsigned long _argvec[3]; volatile unsigned long _res; _argvec[0] = (unsigned long)_orig.nraddr; _argvec[1] = (unsigned long)(arg1); _argvec[2] = (unsigned long)(arg2); __asm__ volatile( VALGRIND_CFI_PROLOGUE VALGRIND_ALIGN_STACK "subq $128,%%rsp\n\t" "movq 16(%%rax), %%rsi\n\t" "movq 8(%%rax), %%rdi\n\t" "movq (%%rax), %%rax\n\t" VALGRIND_CALL_NOREDIR_RAX VALGRIND_RESTORE_STACK VALGRIND_CFI_EPILOGUE : "=a" (_res) : "a" (&_argvec[0]) __FRAME_POINTER : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" ); lval = (__typeof__(lval)) _res; } while (0)
26199#define CALL_FN_W_WWW(lval,orig,arg1,arg2,arg3) do { volatile OrigFn _orig = (orig); volatile unsigned long _argvec[4]; volatile unsigned long _res; _argvec[0] = (unsigned long)_orig.nraddr; _argvec[1] = (unsigned long)(arg1); _argvec[2] = (unsigned long)(arg2); _argvec[3] = (unsigned long)(arg3); __asm__ volatile( VALGRIND_CFI_PROLOGUE VALGRIND_ALIGN_STACK "subq $128,%%rsp\n\t" "movq 24(%%rax), %%rdx\n\t" "movq 16(%%rax), %%rsi\n\t" "movq 8(%%rax), %%rdi\n\t" "movq (%%rax), %%rax\n\t" VALGRIND_CALL_NOREDIR_RAX VALGRIND_RESTORE_STACK VALGRIND_CFI_EPILOGUE : "=a" (_res) : "a" (&_argvec[0]) __FRAME_POINTER : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" ); lval = (__typeof__(lval)) _res; } while (0)
26200#define CALL_FN_W_WWWW(lval,orig,arg1,arg2,arg3,arg4) do { volatile OrigFn _orig = (orig); volatile unsigned long _argvec[5]; volatile unsigned long _res; _argvec[0] = (unsigned long)_orig.nraddr; _argvec[1] = (unsigned long)(arg1); _argvec[2] = (unsigned long)(arg2); _argvec[3] = (unsigned long)(arg3); _argvec[4] = (unsigned long)(arg4); __asm__ volatile( VALGRIND_CFI_PROLOGUE VALGRIND_ALIGN_STACK "subq $128,%%rsp\n\t" "movq 32(%%rax), %%rcx\n\t" "movq 24(%%rax), %%rdx\n\t" "movq 16(%%rax), %%rsi\n\t" "movq 8(%%rax), %%rdi\n\t" "movq (%%rax), %%rax\n\t" VALGRIND_CALL_NOREDIR_RAX VALGRIND_RESTORE_STACK VALGRIND_CFI_EPILOGUE : "=a" (_res) : "a" (&_argvec[0]) __FRAME_POINTER : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" ); lval = (__typeof__(lval)) _res; } while (0)
26201#define CALL_FN_W_5W(lval,orig,arg1,arg2,arg3,arg4,arg5) do { volatile OrigFn _orig = (orig); volatile unsigned long _argvec[6]; volatile unsigned long _res; _argvec[0] = (unsigned long)_orig.nraddr; _argvec[1] = (unsigned long)(arg1); _argvec[2] = (unsigned long)(arg2); _argvec[3] = (unsigned long)(arg3); _argvec[4] = (unsigned long)(arg4); _argvec[5] = (unsigned long)(arg5); __asm__ volatile( VALGRIND_CFI_PROLOGUE VALGRIND_ALIGN_STACK "subq $128,%%rsp\n\t" "movq 40(%%rax), %%r8\n\t" "movq 32(%%rax), %%rcx\n\t" "movq 24(%%rax), %%rdx\n\t" "movq 16(%%rax), %%rsi\n\t" "movq 8(%%rax), %%rdi\n\t" "movq (%%rax), %%rax\n\t" VALGRIND_CALL_NOREDIR_RAX VALGRIND_RESTORE_STACK VALGRIND_CFI_EPILOGUE : "=a" (_res) : "a" (&_argvec[0]) __FRAME_POINTER : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" ); lval = (__typeof__(lval)) _res; } while (0)
26202#define CALL_FN_W_6W(lval,orig,arg1,arg2,arg3,arg4,arg5,arg6) do { volatile OrigFn _orig = (orig); volatile unsigned long _argvec[7]; volatile unsigned long _res; _argvec[0] = (unsigned long)_orig.nraddr; _argvec[1] = (unsigned long)(arg1); _argvec[2] = (unsigned long)(arg2); _argvec[3] = (unsigned long)(arg3); _argvec[4] = (unsigned long)(arg4); _argvec[5] = (unsigned long)(arg5); _argvec[6] = (unsigned long)(arg6); __asm__ volatile( VALGRIND_CFI_PROLOGUE VALGRIND_ALIGN_STACK "subq $128,%%rsp\n\t" "movq 48(%%rax), %%r9\n\t" "movq 40(%%rax), %%r8\n\t" "movq 32(%%rax), %%rcx\n\t" "movq 24(%%rax), %%rdx\n\t" "movq 16(%%rax), %%rsi\n\t" "movq 8(%%rax), %%rdi\n\t" "movq (%%rax), %%rax\n\t" VALGRIND_CALL_NOREDIR_RAX VALGRIND_RESTORE_STACK VALGRIND_CFI_EPILOGUE : "=a" (_res) : "a" (&_argvec[0]) __FRAME_POINTER : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" ); lval = (__typeof__(lval)) _res; } while (0)
26203#define CALL_FN_W_7W(lval,orig,arg1,arg2,arg3,arg4,arg5,arg6,arg7) do { volatile OrigFn _orig = (orig); volatile unsigned long _argvec[8]; volatile unsigned long _res; _argvec[0] = (unsigned long)_orig.nraddr; _argvec[1] = (unsigned long)(arg1); _argvec[2] = (unsigned long)(arg2); _argvec[3] = (unsigned long)(arg3); _argvec[4] = (unsigned long)(arg4); _argvec[5] = (unsigned long)(arg5); _argvec[6] = (unsigned long)(arg6); _argvec[7] = (unsigned long)(arg7); __asm__ volatile( VALGRIND_CFI_PROLOGUE VALGRIND_ALIGN_STACK "subq $136,%%rsp\n\t" "pushq 56(%%rax)\n\t" "movq 48(%%rax), %%r9\n\t" "movq 40(%%rax), %%r8\n\t" "movq 32(%%rax), %%rcx\n\t" "movq 24(%%rax), %%rdx\n\t" "movq 16(%%rax), %%rsi\n\t" "movq 8(%%rax), %%rdi\n\t" "movq (%%rax), %%rax\n\t" VALGRIND_CALL_NOREDIR_RAX VALGRIND_RESTORE_STACK VALGRIND_CFI_EPILOGUE : "=a" (_res) : "a" (&_argvec[0]) __FRAME_POINTER : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" ); lval = (__typeof__(lval)) _res; } while (0)
26204#define CALL_FN_W_8W(lval,orig,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) do { volatile OrigFn _orig = (orig); volatile unsigned long _argvec[9]; volatile unsigned long _res; _argvec[0] = (unsigned long)_orig.nraddr; _argvec[1] = (unsigned long)(arg1); _argvec[2] = (unsigned long)(arg2); _argvec[3] = (unsigned long)(arg3); _argvec[4] = (unsigned long)(arg4); _argvec[5] = (unsigned long)(arg5); _argvec[6] = (unsigned long)(arg6); _argvec[7] = (unsigned long)(arg7); _argvec[8] = (unsigned long)(arg8); __asm__ volatile( VALGRIND_CFI_PROLOGUE VALGRIND_ALIGN_STACK "subq $128,%%rsp\n\t" "pushq 64(%%rax)\n\t" "pushq 56(%%rax)\n\t" "movq 48(%%rax), %%r9\n\t" "movq 40(%%rax), %%r8\n\t" "movq 32(%%rax), %%rcx\n\t" "movq 24(%%rax), %%rdx\n\t" "movq 16(%%rax), %%rsi\n\t" "movq 8(%%rax), %%rdi\n\t" "movq (%%rax), %%rax\n\t" VALGRIND_CALL_NOREDIR_RAX VALGRIND_RESTORE_STACK VALGRIND_CFI_EPILOGUE : "=a" (_res) : "a" (&_argvec[0]) __FRAME_POINTER : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" ); lval = (__typeof__(lval)) _res; } while (0)
26205#define CALL_FN_W_9W(lval,orig,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) do { volatile OrigFn _orig = (orig); volatile unsigned long _argvec[10]; volatile unsigned long _res; _argvec[0] = (unsigned long)_orig.nraddr; _argvec[1] = (unsigned long)(arg1); _argvec[2] = (unsigned long)(arg2); _argvec[3] = (unsigned long)(arg3); _argvec[4] = (unsigned long)(arg4); _argvec[5] = (unsigned long)(arg5); _argvec[6] = (unsigned long)(arg6); _argvec[7] = (unsigned long)(arg7); _argvec[8] = (unsigned long)(arg8); _argvec[9] = (unsigned long)(arg9); __asm__ volatile( VALGRIND_CFI_PROLOGUE VALGRIND_ALIGN_STACK "subq $136,%%rsp\n\t" "pushq 72(%%rax)\n\t" "pushq 64(%%rax)\n\t" "pushq 56(%%rax)\n\t" "movq 48(%%rax), %%r9\n\t" "movq 40(%%rax), %%r8\n\t" "movq 32(%%rax), %%rcx\n\t" "movq 24(%%rax), %%rdx\n\t" "movq 16(%%rax), %%rsi\n\t" "movq 8(%%rax), %%rdi\n\t" "movq (%%rax), %%rax\n\t" VALGRIND_CALL_NOREDIR_RAX VALGRIND_RESTORE_STACK VALGRIND_CFI_EPILOGUE : "=a" (_res) : "a" (&_argvec[0]) __FRAME_POINTER : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" ); lval = (__typeof__(lval)) _res; } while (0)
26206#define CALL_FN_W_10W(lval,orig,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) do { volatile OrigFn _orig = (orig); volatile unsigned long _argvec[11]; volatile unsigned long _res; _argvec[0] = (unsigned long)_orig.nraddr; _argvec[1] = (unsigned long)(arg1); _argvec[2] = (unsigned long)(arg2); _argvec[3] = (unsigned long)(arg3); _argvec[4] = (unsigned long)(arg4); _argvec[5] = (unsigned long)(arg5); _argvec[6] = (unsigned long)(arg6); _argvec[7] = (unsigned long)(arg7); _argvec[8] = (unsigned long)(arg8); _argvec[9] = (unsigned long)(arg9); _argvec[10] = (unsigned long)(arg10); __asm__ volatile( VALGRIND_CFI_PROLOGUE VALGRIND_ALIGN_STACK "subq $128,%%rsp\n\t" "pushq 80(%%rax)\n\t" "pushq 72(%%rax)\n\t" "pushq 64(%%rax)\n\t" "pushq 56(%%rax)\n\t" "movq 48(%%rax), %%r9\n\t" "movq 40(%%rax), %%r8\n\t" "movq 32(%%rax), %%rcx\n\t" "movq 24(%%rax), %%rdx\n\t" "movq 16(%%rax), %%rsi\n\t" "movq 8(%%rax), %%rdi\n\t" "movq (%%rax), %%rax\n\t" VALGRIND_CALL_NOREDIR_RAX VALGRIND_RESTORE_STACK VALGRIND_CFI_EPILOGUE : "=a" (_res) : "a" (&_argvec[0]) __FRAME_POINTER : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" ); lval = (__typeof__(lval)) _res; } while (0)
26207#define CALL_FN_W_11W(lval,orig,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11) do { volatile OrigFn _orig = (orig); volatile unsigned long _argvec[12]; volatile unsigned long _res; _argvec[0] = (unsigned long)_orig.nraddr; _argvec[1] = (unsigned long)(arg1); _argvec[2] = (unsigned long)(arg2); _argvec[3] = (unsigned long)(arg3); _argvec[4] = (unsigned long)(arg4); _argvec[5] = (unsigned long)(arg5); _argvec[6] = (unsigned long)(arg6); _argvec[7] = (unsigned long)(arg7); _argvec[8] = (unsigned long)(arg8); _argvec[9] = (unsigned long)(arg9); _argvec[10] = (unsigned long)(arg10); _argvec[11] = (unsigned long)(arg11); __asm__ volatile( VALGRIND_CFI_PROLOGUE VALGRIND_ALIGN_STACK "subq $136,%%rsp\n\t" "pushq 88(%%rax)\n\t" "pushq 80(%%rax)\n\t" "pushq 72(%%rax)\n\t" "pushq 64(%%rax)\n\t" "pushq 56(%%rax)\n\t" "movq 48(%%rax), %%r9\n\t" "movq 40(%%rax), %%r8\n\t" "movq 32(%%rax), %%rcx\n\t" "movq 24(%%rax), %%rdx\n\t" "movq 16(%%rax), %%rsi\n\t" "movq 8(%%rax), %%rdi\n\t" "movq (%%rax), %%rax\n\t" VALGRIND_CALL_NOREDIR_RAX VALGRIND_RESTORE_STACK VALGRIND_CFI_EPILOGUE : "=a" (_res) : "a" (&_argvec[0]) __FRAME_POINTER : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" ); lval = (__typeof__(lval)) _res; } while (0)
26208#define CALL_FN_W_12W(lval,orig,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12) do { volatile OrigFn _orig = (orig); volatile unsigned long _argvec[13]; volatile unsigned long _res; _argvec[0] = (unsigned long)_orig.nraddr; _argvec[1] = (unsigned long)(arg1); _argvec[2] = (unsigned long)(arg2); _argvec[3] = (unsigned long)(arg3); _argvec[4] = (unsigned long)(arg4); _argvec[5] = (unsigned long)(arg5); _argvec[6] = (unsigned long)(arg6); _argvec[7] = (unsigned long)(arg7); _argvec[8] = (unsigned long)(arg8); _argvec[9] = (unsigned long)(arg9); _argvec[10] = (unsigned long)(arg10); _argvec[11] = (unsigned long)(arg11); _argvec[12] = (unsigned long)(arg12); __asm__ volatile( VALGRIND_CFI_PROLOGUE VALGRIND_ALIGN_STACK "subq $128,%%rsp\n\t" "pushq 96(%%rax)\n\t" "pushq 88(%%rax)\n\t" "pushq 80(%%rax)\n\t" "pushq 72(%%rax)\n\t" "pushq 64(%%rax)\n\t" "pushq 56(%%rax)\n\t" "movq 48(%%rax), %%r9\n\t" "movq 40(%%rax), %%r8\n\t" "movq 32(%%rax), %%rcx\n\t" "movq 24(%%rax), %%rdx\n\t" "movq 16(%%rax), %%rsi\n\t" "movq 8(%%rax), %%rdi\n\t" "movq (%%rax), %%rax\n\t" VALGRIND_CALL_NOREDIR_RAX VALGRIND_RESTORE_STACK VALGRIND_CFI_EPILOGUE : "=a" (_res) : "a" (&_argvec[0]) __FRAME_POINTER : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" ); lval = (__typeof__(lval)) _res; } while (0)
26209#define VG_USERREQ_TOOL_BASE(a,b) ((unsigned int)(((a)&0xff) << 24 | ((b)&0xff) << 16))
26210#define VG_IS_TOOL_USERREQ(a,b,v) (VG_USERREQ_TOOL_BASE(a,b) == ((v) & 0xffff0000))
26211#define RUNNING_ON_VALGRIND (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , VG_USERREQ__RUNNING_ON_VALGRIND, 0, 0, 0, 0, 0)
26212#define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DISCARD_TRANSLATIONS, _qzz_addr, _qzz_len, 0, 0, 0)
26213#define VALGRIND_INNER_THREADS(_qzz_addr) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__INNER_THREADS, _qzz_addr, 0, 0, 0, 0)
26214#define VALGRIND_NON_SIMD_CALL0(_qyy_fn) VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , VG_USERREQ__CLIENT_CALL0, _qyy_fn, 0, 0, 0, 0)
26215#define VALGRIND_NON_SIMD_CALL1(_qyy_fn,_qyy_arg1) VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , VG_USERREQ__CLIENT_CALL1, _qyy_fn, _qyy_arg1, 0, 0, 0)
26216#define VALGRIND_NON_SIMD_CALL2(_qyy_fn,_qyy_arg1,_qyy_arg2) VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , VG_USERREQ__CLIENT_CALL2, _qyy_fn, _qyy_arg1, _qyy_arg2, 0, 0)
26217#define VALGRIND_NON_SIMD_CALL3(_qyy_fn,_qyy_arg1,_qyy_arg2,_qyy_arg3) VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , VG_USERREQ__CLIENT_CALL3, _qyy_fn, _qyy_arg1, _qyy_arg2, _qyy_arg3, 0)
26218#define VALGRIND_COUNT_ERRORS (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR( 0 , VG_USERREQ__COUNT_ERRORS, 0, 0, 0, 0, 0)
26219#define VALGRIND_MALLOCLIKE_BLOCK(addr,sizeB,rzB,is_zeroed) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MALLOCLIKE_BLOCK, addr, sizeB, rzB, is_zeroed, 0)
26220#define VALGRIND_RESIZEINPLACE_BLOCK(addr,oldSizeB,newSizeB,rzB) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__RESIZEINPLACE_BLOCK, addr, oldSizeB, newSizeB, rzB, 0)
26221#define VALGRIND_FREELIKE_BLOCK(addr,rzB) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__FREELIKE_BLOCK, addr, rzB, 0, 0, 0)
26222#define VALGRIND_CREATE_MEMPOOL(pool,rzB,is_zeroed) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CREATE_MEMPOOL, pool, rzB, is_zeroed, 0, 0)
26223#define VALGRIND_MEMPOOL_AUTO_FREE 1
26224#define VALGRIND_MEMPOOL_METAPOOL 2
26225#define VALGRIND_CREATE_MEMPOOL_EXT(pool,rzB,is_zeroed,flags) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CREATE_MEMPOOL, pool, rzB, is_zeroed, flags, 0)
26226#define VALGRIND_DESTROY_MEMPOOL(pool) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DESTROY_MEMPOOL, pool, 0, 0, 0, 0)
26227#define VALGRIND_MEMPOOL_ALLOC(pool,addr,size) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_ALLOC, pool, addr, size, 0, 0)
26228#define VALGRIND_MEMPOOL_FREE(pool,addr) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_FREE, pool, addr, 0, 0, 0)
26229#define VALGRIND_MEMPOOL_TRIM(pool,addr,size) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_TRIM, pool, addr, size, 0, 0)
26230#define VALGRIND_MOVE_MEMPOOL(poolA,poolB) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MOVE_MEMPOOL, poolA, poolB, 0, 0, 0)
26231#define VALGRIND_MEMPOOL_CHANGE(pool,addrA,addrB,size) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_CHANGE, pool, addrA, addrB, size, 0)
26232#define VALGRIND_MEMPOOL_EXISTS(pool) (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__MEMPOOL_EXISTS, pool, 0, 0, 0, 0)
26233#define VALGRIND_STACK_REGISTER(start,end) (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__STACK_REGISTER, start, end, 0, 0, 0)
26234#define VALGRIND_STACK_DEREGISTER(id) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_DEREGISTER, id, 0, 0, 0, 0)
26235#define VALGRIND_STACK_CHANGE(id,start,end) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_CHANGE, id, start, end, 0, 0)
26236#define VALGRIND_LOAD_PDB_DEBUGINFO(fd,ptr,total_size,delta) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__LOAD_PDB_DEBUGINFO, fd, ptr, total_size, delta, 0)
26237#define VALGRIND_MAP_IP_TO_SRCLOC(addr,buf64) (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__MAP_IP_TO_SRCLOC, addr, buf64, 0, 0, 0)
26238#define VALGRIND_DISABLE_ERROR_REPORTING VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, 1, 0, 0, 0, 0)
26239#define VALGRIND_ENABLE_ERROR_REPORTING VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, -1, 0, 0, 0, 0)
26240#define VALGRIND_MONITOR_COMMAND(command) VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__GDB_MONITOR_COMMAND, command, 0, 0, 0, 0)
26241#define VALGRIND_CLO_CHANGE(option) VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CLO_CHANGE, option, 0, 0, 0, 0)
26242#undef PLAT_x86_darwin
26243#undef PLAT_amd64_darwin
26244#undef PLAT_x86_win32
26245#undef PLAT_amd64_win64
26246#undef PLAT_x86_linux
26247#undef PLAT_amd64_linux
26248#undef PLAT_ppc32_linux
26249#undef PLAT_ppc64be_linux
26250#undef PLAT_ppc64le_linux
26251#undef PLAT_arm_linux
26252#undef PLAT_s390x_linux
26253#undef PLAT_mips32_linux
26254#undef PLAT_mips64_linux
26255#undef PLAT_nanomips_linux
26256#undef PLAT_x86_solaris
26257#undef PLAT_amd64_solaris
26258#define VALGRIND_MAKE_MEM_NOACCESS(_qzz_addr,_qzz_len) VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , VG_USERREQ__MAKE_MEM_NOACCESS, (_qzz_addr), (_qzz_len), 0, 0, 0)
26259#define VALGRIND_MAKE_MEM_UNDEFINED(_qzz_addr,_qzz_len) VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , VG_USERREQ__MAKE_MEM_UNDEFINED, (_qzz_addr), (_qzz_len), 0, 0, 0)
26260#define VALGRIND_MAKE_MEM_DEFINED(_qzz_addr,_qzz_len) VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , VG_USERREQ__MAKE_MEM_DEFINED, (_qzz_addr), (_qzz_len), 0, 0, 0)
26261#define VALGRIND_MAKE_MEM_DEFINED_IF_ADDRESSABLE(_qzz_addr,_qzz_len) VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , VG_USERREQ__MAKE_MEM_DEFINED_IF_ADDRESSABLE, (_qzz_addr), (_qzz_len), 0, 0, 0)
26262#define VALGRIND_CREATE_BLOCK(_qzz_addr,_qzz_len,_qzz_desc) VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , VG_USERREQ__CREATE_BLOCK, (_qzz_addr), (_qzz_len), (_qzz_desc), 0, 0)
26263#define VALGRIND_DISCARD(_qzz_blkindex) VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , VG_USERREQ__DISCARD, 0, (_qzz_blkindex), 0, 0, 0)
26264#define VALGRIND_CHECK_MEM_IS_ADDRESSABLE(_qzz_addr,_qzz_len) VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__CHECK_MEM_IS_ADDRESSABLE, (_qzz_addr), (_qzz_len), 0, 0, 0)
26265#define VALGRIND_CHECK_MEM_IS_DEFINED(_qzz_addr,_qzz_len) VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__CHECK_MEM_IS_DEFINED, (_qzz_addr), (_qzz_len), 0, 0, 0)
26266#define VALGRIND_CHECK_VALUE_IS_DEFINED(__lvalue) VALGRIND_CHECK_MEM_IS_DEFINED( (volatile unsigned char *)&(__lvalue), (unsigned long)(sizeof (__lvalue)))
26267#define VALGRIND_DO_LEAK_CHECK VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DO_LEAK_CHECK, 0, 0, 0, 0, 0)
26268#define VALGRIND_DO_ADDED_LEAK_CHECK VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DO_LEAK_CHECK, 0, 1, 0, 0, 0)
26269#define VALGRIND_DO_CHANGED_LEAK_CHECK VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DO_LEAK_CHECK, 0, 2, 0, 0, 0)
26270#define VALGRIND_DO_QUICK_LEAK_CHECK VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DO_LEAK_CHECK, 1, 0, 0, 0, 0)
26271#define VALGRIND_COUNT_LEAKS(leaked,dubious,reachable,suppressed) { unsigned long _qzz_leaked = 0, _qzz_dubious = 0; unsigned long _qzz_reachable = 0, _qzz_suppressed = 0; VALGRIND_DO_CLIENT_REQUEST_STMT( VG_USERREQ__COUNT_LEAKS, &_qzz_leaked, &_qzz_dubious, &_qzz_reachable, &_qzz_suppressed, 0); leaked = _qzz_leaked; dubious = _qzz_dubious; reachable = _qzz_reachable; suppressed = _qzz_suppressed; }
26272#define VALGRIND_COUNT_LEAK_BLOCKS(leaked,dubious,reachable,suppressed) { unsigned long _qzz_leaked = 0, _qzz_dubious = 0; unsigned long _qzz_reachable = 0, _qzz_suppressed = 0; VALGRIND_DO_CLIENT_REQUEST_STMT( VG_USERREQ__COUNT_LEAK_BLOCKS, &_qzz_leaked, &_qzz_dubious, &_qzz_reachable, &_qzz_suppressed, 0); leaked = _qzz_leaked; dubious = _qzz_dubious; reachable = _qzz_reachable; suppressed = _qzz_suppressed; }
26273#define VALGRIND_GET_VBITS(zza,zzvbits,zznbytes) (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__GET_VBITS, (const char*)(zza), (char*)(zzvbits), (zznbytes), 0, 0)
26274#define VALGRIND_SET_VBITS(zza,zzvbits,zznbytes) (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__SET_VBITS, (const char*)(zza), (const char*)(zzvbits), (zznbytes), 0, 0 )
26275#define VALGRIND_DISABLE_ADDR_ERROR_REPORTING_IN_RANGE(_qzz_addr,_qzz_len) VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , VG_USERREQ__DISABLE_ADDR_ERROR_REPORTING_IN_RANGE, (_qzz_addr), (_qzz_len), 0, 0, 0)
26276#define VALGRIND_ENABLE_ADDR_ERROR_REPORTING_IN_RANGE(_qzz_addr,_qzz_len) VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , VG_USERREQ__ENABLE_ADDR_ERROR_REPORTING_IN_RANGE, (_qzz_addr), (_qzz_len), 0, 0, 0)
26277#define SANITIZER_ASAN_INTERFACE_H
26278#define SANITIZER_COMMON_INTERFACE_DEFS_H
26279#define ASAN_POISON_MEMORY_REGION(addr,size) ((void)(addr), (void)(size))
26280#define ASAN_UNPOISON_MEMORY_REGION(addr,size) ((void)(addr), (void)(size))
26281#define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) NO_SANITIZE_ADDRESS(NOINLINE(x))
26282#undef NO_SANITIZE
26283#define NO_SANITIZE(x,y) COMPILER_WARNING_PUSH; COMPILER_WARNING_IGNORED(-Wattributes); __attribute__((__no_sanitize__(x))) y; COMPILER_WARNING_POP
26284#define __asan_poison_memory_region(x,y)
26285#define __asan_unpoison_memory_region(x,y)
26286#define __asan_region_is_poisoned(x,y) 0
26287#define __msan_allocated_memory(x,y) ((void)(x), (void)(y))
26288#define __msan_poison(x,y) ((void)(x), (void)(y))
26289#define __msan_unpoison(x,y) ((void)(x), (void)(y))
26290#define __msan_unpoison_string(x) ((void)(x))
26291#define RUBY_ISEQ_H 1
26292#define ISEQ_MAJOR_VERSION ((unsigned int)ruby_api_version[0])
26293#define ISEQ_MINOR_VERSION ((unsigned int)ruby_api_version[1])
26294#define USE_ISEQ_NODE_ID 1
26295#define ISEQ_COVERAGE(iseq) iseq->body->variable.coverage
26296#define ISEQ_COVERAGE_SET(iseq,cov) RB_OBJ_WRITE(iseq, &iseq->body->variable.coverage, cov)
26297#define ISEQ_LINE_COVERAGE(iseq) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_LINES)
26298#define ISEQ_BRANCH_COVERAGE(iseq) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_BRANCHES)
26299#define ISEQ_PC2BRANCHINDEX(iseq) iseq->body->variable.pc2branchindex
26300#define ISEQ_PC2BRANCHINDEX_SET(iseq,h) RB_OBJ_WRITE(iseq, &iseq->body->variable.pc2branchindex, h)
26301#define ISEQ_FLIP_CNT(iseq) (iseq)->body->variable.flip_count
26302#define ISEQ_TRACE_EVENTS (RUBY_EVENT_LINE | RUBY_EVENT_CLASS | RUBY_EVENT_END | RUBY_EVENT_CALL | RUBY_EVENT_RETURN| RUBY_EVENT_C_CALL| RUBY_EVENT_C_RETURN| RUBY_EVENT_B_CALL| RUBY_EVENT_B_RETURN| RUBY_EVENT_COVERAGE_LINE| RUBY_EVENT_COVERAGE_BRANCH)
26303#define ISEQ_NOT_LOADED_YET IMEMO_FL_USER1
26304#define ISEQ_USE_COMPILE_DATA IMEMO_FL_USER2
26305#define ISEQ_TRANSLATED IMEMO_FL_USER3
26306#define ISEQ_MARKABLE_ISEQ IMEMO_FL_USER4
26307#define ISEQ_EXECUTABLE_P(iseq) (FL_TEST_RAW(((VALUE)iseq), ISEQ_NOT_LOADED_YET | ISEQ_USE_COMPILE_DATA) == 0)
26308#pragma GCC visibility push(default)
26309#define INITIAL_ISEQ_COMPILE_DATA_STORAGE_BUFF_SIZE (512)
26310#pragma GCC visibility pop
26311#define RUBY_MJIT_H 1
26312#define USE_DEBUG_COUNTER 0
26313#define RUBY_DEBUG_COUNTER_H 1
26314#define RB_DEBUG_COUNTER(name) RB_DEBUG_COUNTER_ ##name,
26315#undef RB_DEBUG_COUNTER
26316#define RB_DEBUG_COUNTER_INC(type) ((void)0)
26317#define RB_DEBUG_COUNTER_INC_UNLESS(type,cond) (!!(cond))
26318#define RB_DEBUG_COUNTER_INC_IF(type,cond) (!!(cond))
26319#define RB_DEBUG_COUNTER_ADD(type,num) ((void)0)
26320#define RB_DEBUG_COUNTER_SETMAX(type,num) 0
26321#pragma GCC visibility push(default)
26322#pragma GCC visibility pop
26323#define RUBY_H 1
26324#define HAVE_RUBY_ATOMIC_H 1
26325#define HAVE_RUBY_DEBUG_H 1
26326#define HAVE_RUBY_DEFINES_H 1
26327#define HAVE_RUBY_ENCODING_H 1
26328#define HAVE_RUBY_FIBER_SCHEDULER_H 1
26329#define HAVE_RUBY_INTERN_H 1
26330#define HAVE_RUBY_IO_H 1
26331#define HAVE_RUBY_MEMORY_VIEW_H 1
26332#define HAVE_RUBY_MISSING_H 1
26333#define HAVE_RUBY_ONIGMO_H 1
26334#define HAVE_RUBY_ONIGURUMA_H 1
26335#define HAVE_RUBY_RACTOR_H 1
26336#define HAVE_RUBY_RANDOM_H 1
26337#define HAVE_RUBY_RE_H 1
26338#define HAVE_RUBY_REGEX_H 1
26339#define HAVE_RUBY_RUBY_H 1
26340#define HAVE_RUBY_ST_H 1
26341#define HAVE_RUBY_THREAD_H 1
26342#define HAVE_RUBY_THREAD_NATIVE_H 1
26343#define HAVE_RUBY_UTIL_H 1
26344#define HAVE_RUBY_VERSION_H 1
26345#define HAVE_RUBY_VM_H 1
26346#define YJIT_H 1
26347#define YJIT_STATS RUBY_DEBUG
26348#define YJIT_SUPPORTED_P 1
26349#pragma GCC visibility push(default)
26350#pragma GCC visibility pop
26351#define mjit_enabled true
26352#define RUBY_VM_H 1
26353#pragma GCC visibility push(default)
26354#pragma GCC visibility pop
26355#define RUBY_VM_CALLINFO_H
26356#define VM_CALL_ARGS_SPLAT (0x01 << VM_CALL_ARGS_SPLAT_bit)
26357#define VM_CALL_ARGS_BLOCKARG (0x01 << VM_CALL_ARGS_BLOCKARG_bit)
26358#define VM_CALL_FCALL (0x01 << VM_CALL_FCALL_bit)
26359#define VM_CALL_VCALL (0x01 << VM_CALL_VCALL_bit)
26360#define VM_CALL_ARGS_SIMPLE (0x01 << VM_CALL_ARGS_SIMPLE_bit)
26361#define VM_CALL_BLOCKISEQ (0x01 << VM_CALL_BLOCKISEQ_bit)
26362#define VM_CALL_KWARG (0x01 << VM_CALL_KWARG_bit)
26363#define VM_CALL_KW_SPLAT (0x01 << VM_CALL_KW_SPLAT_bit)
26364#define VM_CALL_TAILCALL (0x01 << VM_CALL_TAILCALL_bit)
26365#define VM_CALL_SUPER (0x01 << VM_CALL_SUPER_bit)
26366#define VM_CALL_ZSUPER (0x01 << VM_CALL_ZSUPER_bit)
26367#define VM_CALL_OPT_SEND (0x01 << VM_CALL_OPT_SEND_bit)
26368#define VM_CALL_KW_SPLAT_MUT (0x01 << VM_CALL_KW_SPLAT_MUT_bit)
26369#define USE_EMBED_CI 1
26370#define CI_EMBED_TAG_bits 1
26371#define CI_EMBED_ARGC_bits 15
26372#define CI_EMBED_FLAG_bits 16
26373#define CI_EMBED_ID_bits 32
26374#define CI_EMBED_FLAG 0x01
26375#define CI_EMBED_ARGC_SHFT (CI_EMBED_TAG_bits)
26376#define CI_EMBED_ARGC_MASK ((((VALUE)1)<<CI_EMBED_ARGC_bits) - 1)
26377#define CI_EMBED_FLAG_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits)
26378#define CI_EMBED_FLAG_MASK ((((VALUE)1)<<CI_EMBED_FLAG_bits) - 1)
26379#define CI_EMBED_ID_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits + CI_EMBED_FLAG_bits)
26380#define CI_EMBED_ID_MASK ((((VALUE)1)<<CI_EMBED_ID_bits) - 1)
26381#define vm_ci_new(mid,flag,argc,kwarg) vm_ci_new_(mid, flag, argc, kwarg, __FILE__, __LINE__)
26382#define vm_ci_new_runtime(mid,flag,argc,kwarg) vm_ci_new_runtime_(mid, flag, argc, kwarg, __FILE__, __LINE__)
26383#define VM_CI_EMBEDDABLE_P(mid,flag,argc,kwarg) (((mid ) & ~CI_EMBED_ID_MASK) ? false : ((flag) & ~CI_EMBED_FLAG_MASK) ? false : ((argc) & ~CI_EMBED_ARGC_MASK) ? false : (kwarg) ? false : true)
26384#define vm_ci_new_id(mid,flag,argc,must_zero) ((const struct rb_callinfo *) ((((VALUE)(mid )) << CI_EMBED_ID_SHFT) | (((VALUE)(flag)) << CI_EMBED_FLAG_SHFT) | (((VALUE)(argc)) << CI_EMBED_ARGC_SHFT) | RUBY_FIXNUM_FLAG))
26385#define VM_CALLINFO_NOT_UNDER_GC IMEMO_FL_USER0
26386#define VM_CI_ON_STACK(mid_,flags_,argc_,kwarg_) (struct rb_callinfo) { .flags = T_IMEMO | (imemo_callinfo << FL_USHIFT) | VM_CALLINFO_NOT_UNDER_GC, .mid = mid_, .flag = flags_, .argc = argc_, .kwarg = kwarg_, }
26387#define VM_CALLCACHE_UNMARKABLE IMEMO_FL_USER0
26388#define VM_CALLCACHE_ON_STACK IMEMO_FL_USER1
26389#define VM_CC_ON_STACK(clazz,call,aux,cme) (struct rb_callcache) { .flags = T_IMEMO | (imemo_callcache << FL_USHIFT) | VM_CALLCACHE_UNMARKABLE | VM_CALLCACHE_ON_STACK, .klass = clazz, .cme_ = cme, .call_ = call, .aux_ = aux, }
26390#define vm_cc_empty() rb_vm_empty_cc()
26391#define RUBY_DEBUG_H
26392#pragma GCC visibility push(default)
26393#define dpv(h,v) ruby_debug_print_value(-1, 0, (h), (v))
26394#define dp(v) ruby_debug_print_value(-1, 0, "", (v))
26395#define dpi(i) ruby_debug_print_id(-1, 0, "", (i))
26396#define dpn(n) ruby_debug_print_node(-1, 0, "", (n))
26397#pragma GCC visibility pop
26398#define RUBY_DEVEL 0
26399#define _RUBY_DEBUG_LOG(...) ruby_debug_log(__FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING, "" __VA_ARGS__)
26400#define RUBY_DEBUG_LOG(...)
26401#define RUBY_DEBUG_LOG2(file,line,...)
26402#define RUBY_VM_EXEC_H
26403#define debugs
26404#define DEBUG_ENTER_INSN(insn)
26405#define DEBUG_END_INSN()
26406#define throwdebug if(0)ruby_debug_printf
26407#define USE_INSNS_COUNTER 0
26408#define LABEL(x) INSN_LABEL_ ##x
26409#define ELABEL(x) INSN_ELABEL_ ##x
26410#define LABEL_PTR(x) RB_GNUC_EXTENSION(&&LABEL(x))
26411#define INSN_ENTRY_SIG(insn) if (0) { ruby_debug_printf("exec: %s@(%"PRIdPTRDIFF", %"PRIdPTRDIFF")@%s:%u\n", #insn, (reg_pc - reg_cfp->iseq->body->iseq_encoded), (reg_cfp->pc - reg_cfp->iseq->body->iseq_encoded), RSTRING_PTR(rb_iseq_path(reg_cfp->iseq)), rb_iseq_line_no(reg_cfp->iseq, reg_pc - reg_cfp->iseq->body->iseq_encoded)); } if (USE_INSNS_COUNTER) vm_insns_counter_count_insn(BIN(insn));
26412#define INSN_DISPATCH_SIG(insn)
26413#define INSN_ENTRY(insn) LABEL(insn): INSN_ENTRY_SIG(insn);
26414#define TC_DISPATCH(insn) INSN_DISPATCH_SIG(insn); RB_GNUC_EXTENSION_BLOCK(goto *(void const *)GET_CURRENT_INSN()); ;
26415#define END_INSN(insn) DEBUG_END_INSN(); TC_DISPATCH(insn);
26416#define INSN_DISPATCH() TC_DISPATCH(__START__) {
26417#define END_INSNS_DISPATCH() rb_bug("unknown insn: %"PRIdVALUE, GET_CURRENT_INSN()); }
26418#define NEXT_INSN() TC_DISPATCH(__NEXT_INSN__)
26419#define START_OF_ORIGINAL_INSN(x) if (0) goto start_of_ ##x; start_of_ ##x:
26420#define DISPATCH_ORIGINAL_INSN(x) goto start_of_ ##x;
26421#define VM_SP_CNT(ec,sp) ((sp) - (ec)->vm_stack)
26422#define THROW_EXCEPTION(exc) do { ec->errinfo = (VALUE)(exc); EC_JUMP_TAG(ec, ec->tag->state); } while (0)
26423#define SCREG(r) (reg_ ##r)
26424#define VM_DEBUG_STACKOVERFLOW 0
26425#define CHECK_VM_STACK_OVERFLOW_FOR_INSN(cfp,margin)
26426#define INSN_LABEL2(insn,name) INSN_LABEL_ ## insn ## _ ## name
26427#define INSN_LABEL(x) INSN_LABEL2(NAME_OF_CURRENT_INSN, x)
26428#define RUBY_INSNHELPER_H
26429#pragma GCC visibility push(default)
26430#pragma GCC visibility pop
26431#define COLLECT_USAGE_INSN(insn)
26432#define COLLECT_USAGE_OPERAND(insn,n,op)
26433#define COLLECT_USAGE_REGISTER(reg,s)
26434#define PUSH(x) (SET_SV(x), INC_SP(1))
26435#define TOPN(n) (*(GET_SP()-(n)-1))
26436#define POPN(n) (DEC_SP(n))
26437#define POP() (DEC_SP(1))
26438#define STACK_ADDR_FROM_TOP(n) (GET_SP()-(n))
26439#define VM_REG_CFP (reg_cfp)
26440#define VM_REG_PC (VM_REG_CFP->pc)
26441#define VM_REG_SP (VM_REG_CFP->sp)
26442#define VM_REG_EP (VM_REG_CFP->ep)
26443#define RESTORE_REGS() do { VM_REG_CFP = ec->cfp; } while (0)
26444#define COLLECT_USAGE_REGISTER_HELPER(a,b,v) (v)
26445#define GET_PC() (COLLECT_USAGE_REGISTER_HELPER(PC, GET, VM_REG_PC))
26446#define SET_PC(x) (VM_REG_PC = (COLLECT_USAGE_REGISTER_HELPER(PC, SET, (x))))
26447#define GET_CURRENT_INSN() (*GET_PC())
26448#define GET_OPERAND(n) (GET_PC()[(n)])
26449#define ADD_PC(n) (SET_PC(VM_REG_PC + (n)))
26450#define JUMP(dst) (SET_PC(VM_REG_PC + (dst)))
26451#define GET_CFP() (COLLECT_USAGE_REGISTER_HELPER(CFP, GET, VM_REG_CFP))
26452#define GET_EP() (COLLECT_USAGE_REGISTER_HELPER(EP, GET, VM_REG_EP))
26453#define SET_EP(x) (VM_REG_EP = (COLLECT_USAGE_REGISTER_HELPER(EP, SET, (x))))
26454#define GET_LEP() (VM_EP_LEP(GET_EP()))
26455#define GET_SP() (COLLECT_USAGE_REGISTER_HELPER(SP, GET, VM_REG_SP))
26456#define SET_SP(x) (VM_REG_SP = (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
26457#define INC_SP(x) (VM_REG_SP += (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
26458#define DEC_SP(x) (VM_REG_SP -= (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
26459#define SET_SV(x) (*GET_SP() = rb_ractor_confirm_belonging(x))
26460#define GET_ISEQ() (GET_CFP()->iseq)
26461#define GET_PREV_EP(ep) ((VALUE *)((ep)[VM_ENV_DATA_INDEX_SPECVAL] & ~0x03))
26462#define GET_SELF() (COLLECT_USAGE_REGISTER_HELPER(SELF, GET, GET_CFP()->self))
26463#define GET_BLOCK_HANDLER() (GET_LEP()[VM_ENV_DATA_INDEX_SPECVAL])
26464#define SETUP_CANARY(cond) if (cond) {} else {}
26465#define CHECK_CANARY(cond,insn) if (cond) {(void)(insn);}
26466#define PREV_CLASS_SERIAL() (ruby_vm_class_serial)
26467#define NEXT_CLASS_SERIAL() (++ruby_vm_class_serial)
26468#define GET_GLOBAL_CONSTANT_STATE() (ruby_vm_global_constant_state)
26469#define INC_GLOBAL_CONSTANT_STATE() (++ruby_vm_global_constant_state)
26470#define GET_GLOBAL_CVAR_STATE() (ruby_vm_global_cvar_state)
26471#define INC_GLOBAL_CVAR_STATE() (++ruby_vm_global_cvar_state)
26472#define IS_ARGS_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_ARGS_SPLAT)
26473#define IS_ARGS_KEYWORD(ci) (vm_ci_flag(ci) & VM_CALL_KWARG)
26474#define IS_ARGS_KW_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT)
26475#define IS_ARGS_KW_OR_KW_SPLAT(ci) (vm_ci_flag(ci) & (VM_CALL_KWARG | VM_CALL_KW_SPLAT))
26476#define IS_ARGS_KW_SPLAT_MUT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT_MUT)
26477#define RUBY_RACTOR_H 1
26478#pragma GCC visibility push(default)
26479#define RB_RACTOR_LOCAL_STORAGE_TYPE_FREE (&rb_ractor_local_storage_type_free)
26480#pragma GCC visibility pop
26481#define RB_OBJ_SHAREABLE_P(obj) FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)
26482#define RACTOR_CHECK_MODE (0 || VM_CHECK_MODE || RUBY_DEBUG)
26483#pragma GCC visibility push(default)
26484#pragma GCC visibility pop
26485#define rb_ractor_confirm_belonging(obj) obj
26486#define RUBY_VM_SYNC_H
26487#define LOCATION_ARGS void
26488#define LOCATION_PARAMS
26489#define APPEND_LOCATION_ARGS
26490#define APPEND_LOCATION_PARAMS
26491#define RB_VM_LOCKED_P() rb_vm_locked_p()
26492#define RB_VM_LOCK() rb_vm_lock(__FILE__, __LINE__)
26493#define RB_VM_UNLOCK() rb_vm_unlock(__FILE__, __LINE__)
26494#define RB_VM_LOCK_ENTER_CR_LEV(cr,levp) rb_vm_lock_enter_cr(cr, levp, __FILE__, __LINE__)
26495#define RB_VM_LOCK_LEAVE_CR_LEV(cr,levp) rb_vm_lock_leave_cr(cr, levp, __FILE__, __LINE__)
26496#define RB_VM_LOCK_ENTER_LEV(levp) rb_vm_lock_enter(levp, __FILE__, __LINE__)
26497#define RB_VM_LOCK_LEAVE_LEV(levp) rb_vm_lock_leave(levp, __FILE__, __LINE__)
26498#define RB_VM_LOCK_ENTER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV(&_lev);
26499#define RB_VM_LOCK_LEAVE() RB_VM_LOCK_LEAVE_LEV(&_lev); }
26500#define RB_VM_LOCK_ENTER_LEV_NB(levp) rb_vm_lock_enter_nb(levp, __FILE__, __LINE__)
26501#define RB_VM_LOCK_ENTER_NO_BARRIER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV_NB(&_lev);
26502#define RB_VM_LOCK_LEAVE_NO_BARRIER() RB_VM_LOCK_LEAVE_LEV(&_lev); }
26503#define ASSERT_vm_locking()
26504#define ASSERT_vm_unlocking()
26505#define BUILTIN_H_INCLUDED
26506#define RB_BUILTIN_FUNCTION(_i,_name,_fname,_arity,_compiler) { .name = #_name, .func_ptr = (void *)_fname, .argc = _arity, .index = _i, .compiler = _compiler, }
26507#define _PROBES_H
26508#define DTRACE_PROBES_DISABLED 1
26509#define RUBY_DTRACE_METHOD_ENTRY_ENABLED() 0
26510#define RUBY_DTRACE_METHOD_ENTRY(classname,methodname,filename,lineno) do {} while (0)
26511#define RUBY_DTRACE_METHOD_RETURN_ENABLED() 0
26512#define RUBY_DTRACE_METHOD_RETURN(classname,methodname,filename,lineno) do {} while (0)
26513#define RUBY_DTRACE_CMETHOD_ENTRY_ENABLED() 0
26514#define RUBY_DTRACE_CMETHOD_ENTRY(classname,methodname,filename,lineno) do {} while (0)
26515#define RUBY_DTRACE_CMETHOD_RETURN_ENABLED() 0
26516#define RUBY_DTRACE_CMETHOD_RETURN(classname,methodname,filename,lineno) do {} while (0)
26517#define RUBY_DTRACE_REQUIRE_ENTRY_ENABLED() 0
26518#define RUBY_DTRACE_REQUIRE_ENTRY(rquiredfile,filename,lineno) do {} while (0)
26519#define RUBY_DTRACE_REQUIRE_RETURN_ENABLED() 0
26520#define RUBY_DTRACE_REQUIRE_RETURN(requiredfile,filename,lineno) do {} while (0)
26521#define RUBY_DTRACE_FIND_REQUIRE_ENTRY_ENABLED() 0
26522#define RUBY_DTRACE_FIND_REQUIRE_ENTRY(requiredfile,filename,lineno) do {} while (0)
26523#define RUBY_DTRACE_FIND_REQUIRE_RETURN_ENABLED() 0
26524#define RUBY_DTRACE_FIND_REQUIRE_RETURN(requiredfile,filename,lineno) do {} while (0)
26525#define RUBY_DTRACE_LOAD_ENTRY_ENABLED() 0
26526#define RUBY_DTRACE_LOAD_ENTRY(loadedfile,filename,lineno) do {} while (0)
26527#define RUBY_DTRACE_LOAD_RETURN_ENABLED() 0
26528#define RUBY_DTRACE_LOAD_RETURN(loadedfile,filename,lineno) do {} while (0)
26529#define RUBY_DTRACE_RAISE_ENABLED() 0
26530#define RUBY_DTRACE_RAISE(classname,filename,lineno) do {} while (0)
26531#define RUBY_DTRACE_OBJECT_CREATE_ENABLED() 0
26532#define RUBY_DTRACE_OBJECT_CREATE(classname,filename,lineno) do {} while (0)
26533#define RUBY_DTRACE_ARRAY_CREATE_ENABLED() 0
26534#define RUBY_DTRACE_ARRAY_CREATE(length,filename,lineno) do {} while (0)
26535#define RUBY_DTRACE_HASH_CREATE_ENABLED() 0
26536#define RUBY_DTRACE_HASH_CREATE(length,filename,lineno) do {} while (0)
26537#define RUBY_DTRACE_STRING_CREATE_ENABLED() 0
26538#define RUBY_DTRACE_STRING_CREATE(length,filename,lineno) do {} while (0)
26539#define RUBY_DTRACE_SYMBOL_CREATE_ENABLED() 0
26540#define RUBY_DTRACE_SYMBOL_CREATE(str,filename,lineno) do {} while (0)
26541#define RUBY_DTRACE_PARSE_BEGIN_ENABLED() 0
26542#define RUBY_DTRACE_PARSE_BEGIN(sourcefile,lineno) do {} while (0)
26543#define RUBY_DTRACE_PARSE_END_ENABLED() 0
26544#define RUBY_DTRACE_PARSE_END(sourcefile,lineno) do {} while (0)
26545#define RUBY_DTRACE_INSN_ENABLED() 0
26546#define RUBY_DTRACE_INSN(insns_name) do {} while (0)
26547#define RUBY_DTRACE_INSN_OPERAND_ENABLED() 0
26548#define RUBY_DTRACE_INSN_OPERAND(val,insns_name) do {} while (0)
26549#define RUBY_DTRACE_GC_MARK_BEGIN_ENABLED() 0
26550#define RUBY_DTRACE_GC_MARK_BEGIN() do {} while (0)
26551#define RUBY_DTRACE_GC_MARK_END_ENABLED() 0
26552#define RUBY_DTRACE_GC_MARK_END() do {} while (0)
26553#define RUBY_DTRACE_GC_SWEEP_BEGIN_ENABLED() 0
26554#define RUBY_DTRACE_GC_SWEEP_BEGIN() do {} while (0)
26555#define RUBY_DTRACE_GC_SWEEP_END_ENABLED() 0
26556#define RUBY_DTRACE_GC_SWEEP_END() do {} while (0)
26557#define RUBY_PROBES_HELPER_H
26558#pragma GCC visibility push(default)
26559#pragma GCC visibility pop
26560#define RUBY_DTRACE_METHOD_HOOK(name,ec,klazz,id) do { if (UNLIKELY(RUBY_DTRACE_ ##name ##_ENABLED())) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, klazz, id, &args)) { RUBY_DTRACE_ ##name(args.classname, args.methodname, args.filename, args.line_no); } } } while (0)
26561#define RUBY_DTRACE_METHOD_ENTRY_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(METHOD_ENTRY, ec, klass, id)
26562#define RUBY_DTRACE_METHOD_RETURN_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(METHOD_RETURN, ec, klass, id)
26563#define RUBY_DTRACE_CMETHOD_ENTRY_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(CMETHOD_ENTRY, ec, klass, id)
26564#define RUBY_DTRACE_CMETHOD_RETURN_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(CMETHOD_RETURN, ec, klass, id)
26565#pragma GCC diagnostic push
26566#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26567#pragma GCC diagnostic pop
26568#define CONSTANT_H
26569#define RB_CONST_PRIVATE_P(ce) (((ce)->flag & CONST_VISIBILITY_MASK) == CONST_PRIVATE)
26570#define RB_CONST_PUBLIC_P(ce) (((ce)->flag & CONST_VISIBILITY_MASK) == CONST_PUBLIC)
26571#define RB_CONST_DEPRECATED_P(ce) ((ce)->flag & CONST_DEPRECATED)
26572#pragma GCC visibility push(default)
26573#pragma GCC visibility pop
26574#define INTERNAL_COMPAR_H
26575#define STRING_P(s) (RB_TYPE_P((s), T_STRING) && CLASS_OF(s) == rb_cString)
26576#define NEW_CMP_OPT_MEMO(type,value) NEW_PARTIAL_MEMO_FOR(type, value, cmp_opt)
26577#define CMP_OPTIMIZABLE_BIT(type) (1U << TOKEN_PASTE(cmp_opt_,type))
26578#define CMP_OPTIMIZABLE(data,type) (((data).opt_inited & CMP_OPTIMIZABLE_BIT(type)) ? ((data).opt_methods & CMP_OPTIMIZABLE_BIT(type)) : (((data).opt_inited |= CMP_OPTIMIZABLE_BIT(type)), rb_method_basic_definition_p(TOKEN_PASTE(rb_c,type), id_cmp) && ((data).opt_methods |= CMP_OPTIMIZABLE_BIT(type))))
26579#define OPTIMIZED_CMP(a,b,data) ((FIXNUM_P(a) && FIXNUM_P(b) && CMP_OPTIMIZABLE(data, Integer)) ? (((long)a > (long)b) ? 1 : ((long)a < (long)b) ? -1 : 0) : (STRING_P(a) && STRING_P(b) && CMP_OPTIMIZABLE(data, String)) ? rb_str_cmp(a, b) : (RB_FLOAT_TYPE_P(a) && RB_FLOAT_TYPE_P(b) && CMP_OPTIMIZABLE(data, Float)) ? rb_float_cmp(a, b) : rb_cmpint(rb_funcallv(a, id_cmp, 1, &b), a, b))
26580#define INTERNAL_HASH_H
26581#define RHASH_AR_TABLE_MAX_SIZE SIZEOF_VALUE
26582#define RHASH_LEV_MASK (FL_USER13 | FL_USER14 | FL_USER15 | FL_USER16 | FL_USER17 | FL_USER18 | FL_USER19)
26583#define RHASH(obj) ((struct RHash *)(obj))
26584#pragma GCC visibility push(default)
26585#pragma GCC visibility pop
26586#pragma GCC visibility push(default)
26587#define RHASH_TBL_RAW(h) rb_hash_tbl_raw(h, __FILE__, __LINE__)
26588#pragma GCC visibility pop
26589#define INTERNAL_NUMERIC_H
26590#define INTERNAL_BIGNUM_H
26591#define BDIGIT unsigned int
26592#define SIZEOF_BDIGIT SIZEOF_INT
26593#define BDIGIT_DBL unsigned LONG_LONG
26594#define BDIGIT_DBL_SIGNED LONG_LONG
26595#define PRI_BDIGIT_PREFIX ""
26596#define PRI_BDIGIT_DBL_PREFIX PRI_LL_PREFIX
26597#define SIZEOF_ACTUAL_BDIGIT SIZEOF_BDIGIT
26598#define PRIdBDIGIT PRI_BDIGIT_PREFIX"d"
26599#define PRIiBDIGIT PRI_BDIGIT_PREFIX"i"
26600#define PRIoBDIGIT PRI_BDIGIT_PREFIX"o"
26601#define PRIuBDIGIT PRI_BDIGIT_PREFIX"u"
26602#define PRIxBDIGIT PRI_BDIGIT_PREFIX"x"
26603#define PRIXBDIGIT PRI_BDIGIT_PREFIX"X"
26604#define PRIdBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"d"
26605#define PRIiBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"i"
26606#define PRIoBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"o"
26607#define PRIuBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"u"
26608#define PRIxBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"x"
26609#define PRIXBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"X"
26610#define RBIGNUM(obj) ((struct RBignum *)(obj))
26611#define BIGNUM_SIGN_BIT FL_USER1
26612#define BIGNUM_EMBED_FLAG ((VALUE)FL_USER2)
26613#define BIGNUM_EMBED_LEN_NUMBITS 3
26614#define BIGNUM_EMBED_LEN_MASK (~(~(VALUE)0U << BIGNUM_EMBED_LEN_NUMBITS) << BIGNUM_EMBED_LEN_SHIFT)
26615#define BIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+3)
26616#define BIGNUM_EMBED_LEN_MAX (SIZEOF_VALUE*RBIMPL_RVALUE_EMBED_LEN_MAX/SIZEOF_ACTUAL_BDIGIT)
26617#pragma GCC visibility push(default)
26618#pragma GCC visibility pop
26619#pragma GCC visibility push(default)
26620#pragma GCC visibility pop
26621#define INTERNAL_BITS_H
26622#define HALF_LONG_MSB ((SIGNED_VALUE)1<<((SIZEOF_LONG*CHAR_BIT-1)/2))
26623#define SIGNED_INTEGER_TYPE_P(T) (0 > ((T)0)-1)
26624#define SIGNED_INTEGER_MIN(T) ((sizeof(T) == sizeof(int8_t)) ? ((T)INT8_MIN) : ((sizeof(T) == sizeof(int16_t)) ? ((T)INT16_MIN) : ((sizeof(T) == sizeof(int32_t)) ? ((T)INT32_MIN) : ((sizeof(T) == sizeof(int64_t)) ? ((T)INT64_MIN) : 0))))
26625#define SIGNED_INTEGER_MAX(T) ((T)(SIGNED_INTEGER_MIN(T) ^ ((T)~(T)0)))
26626#define UNSIGNED_INTEGER_MAX(T) ((T)~(T)0)
26627#define MUL_OVERFLOW_P(a,b) __builtin_mul_overflow_p((a), (b), (__typeof__(a * b))0)
26628#define MUL_OVERFLOW_SIGNED_INTEGER_P(a,b,min,max) ( (a) == 0 ? 0 : (a) == -1 ? (b) < -(max) : (a) > 0 ? ((b) > 0 ? (max) / (a) < (b) : (min) / (a) > (b)) : ((b) > 0 ? (min) / (a) < (b) : (max) / (a) > (b)))
26629#define MUL_OVERFLOW_FIXNUM_P(a,b) __extension__ ({ struct { long fixnum : sizeof(long) * CHAR_BIT - 1; } c = { 0 }; __builtin_mul_overflow_p((a), (b), c.fixnum); })
26630#define MUL_OVERFLOW_LONG_LONG_P(a,b) MUL_OVERFLOW_P(a, b)
26631#define MUL_OVERFLOW_LONG_P(a,b) MUL_OVERFLOW_P(a, b)
26632#define MUL_OVERFLOW_INT_P(a,b) MUL_OVERFLOW_P(a, b)
26633#define bit_length(x) (unsigned int) (sizeof(x) <= sizeof(int32_t) ? 32 - nlz_int32((uint32_t)(x)) : sizeof(x) <= sizeof(int64_t) ? 64 - nlz_int64((uint64_t)(x)) : 128 - nlz_int128((uint128_t)(x)))
26634#define swap16 ruby_swap16
26635#define swap32 ruby_swap32
26636#define swap64 ruby_swap64
26637#define INTERNAL_FIXNUM_H
26638#define DLONG int128_t
26639#define DL2NUM(x) (RB_FIXABLE(x) ? LONG2FIX(x) : rb_int128t2big(x))
26640#define ROUND_TO(mode,even,up,down) ((mode) == RUBY_NUM_ROUND_HALF_EVEN ? even : (mode) == RUBY_NUM_ROUND_HALF_UP ? up : down)
26641#define ROUND_FUNC(mode,name) ROUND_TO(mode, name ##_half_even, name ##_half_up, name ##_half_down)
26642#define ROUND_CALL(mode,name,args) ROUND_TO(mode, name ##_half_even args, name ##_half_up args, name ##_half_down args)
26643#define ROUND_DEFAULT RUBY_NUM_ROUND_HALF_UP
26644#define RFLOAT(obj) ((struct RFloat *)(obj))
26645#define rb_float_value rb_float_value_inline
26646#define rb_float_new rb_float_new_inline
26647#pragma GCC visibility push(default)
26648#pragma GCC visibility pop
26649#pragma GCC visibility push(default)
26650#pragma GCC visibility pop
26651#define INTERNAL_RANDOM_H
26652#define INTERNAL_VARIABLE_H
26653#define ROBJECT_TRANSIENT_FLAG FL_USER13
26654#pragma GCC visibility push(default)
26655#pragma GCC visibility pop
26656#pragma GCC visibility push(default)
26657#pragma GCC visibility pop
26658#define INTERNAL_STRUCT_H
26659#define RSTRUCT(obj) ((struct RStruct *)(obj))
26660#define RSTRUCT_LEN internal_RSTRUCT_LEN
26661#define RSTRUCT_SET internal_RSTRUCT_SET
26662#define RSTRUCT_GET internal_RSTRUCT_GET
26663#pragma GCC diagnostic push
26664#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26665#pragma GCC diagnostic pop
26666#define RUBY_TOPLEVEL_VARIABLE_H
26667#define BIN(n) YARVINSN_ ##n
26668#define ASSERT_VM_INSTRUCTION_SIZE(array) STATIC_ASSERT(numberof_ ##array, numberof(array) == VM_INSTRUCTION_SIZE)
26669#define vm_check_canary(ec,sp)
26670#define vm_check_frame(a,b,c,d)
26671#define vm_push_frame_debug_counter_inc(ec,cfp,t)
26672#pragma GCC diagnostic push
26673#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26674#pragma GCC diagnostic pop
26675#pragma GCC diagnostic push
26676#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26677#pragma GCC diagnostic pop
26678#pragma GCC diagnostic push
26679#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26680#pragma GCC diagnostic pop
26681#pragma GCC diagnostic push
26682#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26683#pragma GCC diagnostic pop
26684#pragma GCC diagnostic push
26685#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26686#pragma GCC diagnostic pop
26687#pragma GCC diagnostic push
26688#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26689#pragma GCC diagnostic pop
26690#pragma GCC diagnostic push
26691#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26692#pragma GCC diagnostic pop
26693#pragma GCC diagnostic push
26694#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26695#pragma GCC diagnostic pop
26696#pragma GCC diagnostic push
26697#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26698#pragma GCC diagnostic pop
26699#pragma GCC diagnostic push
26700#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26701#pragma GCC diagnostic pop
26702#pragma GCC diagnostic push
26703#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26704#pragma GCC diagnostic pop
26705#pragma GCC diagnostic push
26706#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26707#pragma GCC diagnostic pop
26708#define EQ_UNREDEFINED_P(t) BASIC_OP_UNREDEFINED_P(BOP_EQ, t ##_REDEFINED_OP_FLAG)
26709#undef EQ_UNREDEFINED_P
26710#define CHECK_CMP_NAN(a,b)
26711#define KW_SPECIFIED_BITS_MAX (32-1)
26712#define USE_OPT_HIST 0
26713#define CHECK_CFP_CONSISTENCY(func) (LIKELY(vm_cfp_consistent_p(ec, reg_cfp)) ? (void)0 : rb_bug(func ": cfp consistency error (%p, %p)", (void *)reg_cfp, (void *)(ec->cfp+1)))
26714#pragma GCC diagnostic push
26715#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26716#pragma GCC diagnostic pop
26717#pragma GCC diagnostic push
26718#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26719#pragma GCC diagnostic pop
26720#define VM_CALL_METHOD_ATTR(var,func,nohook) if (UNLIKELY(ruby_vm_event_flags & (RUBY_EVENT_C_CALL | RUBY_EVENT_C_RETURN))) { EXEC_EVENT_HOOK(ec, RUBY_EVENT_C_CALL, calling->recv, vm_cc_cme(cc)->def->original_id, vm_ci_mid(ci), vm_cc_cme(cc)->owner, Qundef); var = func; EXEC_EVENT_HOOK(ec, RUBY_EVENT_C_RETURN, calling->recv, vm_cc_cme(cc)->def->original_id, vm_ci_mid(ci), vm_cc_cme(cc)->owner, (var)); } else { nohook; var = func; }
26721#pragma GCC diagnostic push
26722#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26723#pragma GCC diagnostic pop
26724#pragma GCC diagnostic push
26725#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26726#pragma GCC diagnostic pop
26727#define mexp_search_method vm_search_method_wrap
26728#define mexp_search_super vm_search_super_method
26729#define mexp_search_invokeblock vm_search_invokeblock
26730#define id_cmp idCmp
26731#undef id_cmp
26732#define IMEMO_CONST_CACHE_SHAREABLE IMEMO_FL_USER0
26733#pragma GCC diagnostic push
26734#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26735#pragma GCC diagnostic pop
26736#pragma GCC diagnostic push
26737#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26738#pragma GCC diagnostic pop
26739#pragma GCC diagnostic push
26740#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
26741#pragma GCC diagnostic pop
26742#define VM_TRACE_HOOK(target_event,val) do { if ((pc_events & (target_event)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (target_event), global_hooks, local_hooks, (val)); } } while (0)
26743#undef VM_TRACE_HOOK
26744#define id_mesg idMesg
#define LONG_LONG
Definition: long_long.h:38
static VALUE RB_CHR2FIX(unsigned char c)
Converts a C's unsigned char into an instance of rb_cInteger.
Definition: char.h:56
static char rb_num2char_inline(VALUE x)
Converts an instance of rb_cNumeric into C's char.
Definition: char.h:73
static int rb_isdigit(int c)
Our own locale-insensitive version of isdigit(3).
Definition: ctype.h:302
static int rb_isupper(int c)
Our own locale-insensitive version of isupper(3).
Definition: ctype.h:232
static int rb_iscntrl(int c)
Our own locale-insensitive version of iscntrl(3).
Definition: ctype.h:418
static int rb_ispunct(int c)
Our own locale-insensitive version of ispunct(3).
Definition: ctype.h:465
static int rb_isalnum(int c)
Our own locale-insensitive version of isalnum(3).
Definition: ctype.h:326
static int rb_isxdigit(int c)
Our own locale-insensitive version of isxdigit(3).
Definition: ctype.h:349
static int rb_isspace(int c)
Our own locale-insensitive version of isspace(3).
Definition: ctype.h:395
static int rb_isascii(int c)
Our own locale-insensitive version of isascii(3).
Definition: ctype.h:209
static int rb_toupper(int c)
Our own locale-insensitive version of toupper(3).
Definition: ctype.h:539
unsigned long ruby_strtoul(const char *str, char **endptr, int base)
Our own locale-insensitive version of strtoul(3).
Definition: util.c:133
static int rb_tolower(int c)
Our own locale-insensitive version of tolower(3).
Definition: ctype.h:514
static int rb_isgraph(int c)
Our own locale-insensitive version of isgraph(3).
Definition: ctype.h:489
static int rb_isalpha(int c)
Our own locale-insensitive version of isalpha(3).
Definition: ctype.h:279
static int rb_islower(int c)
Our own locale-insensitive version of islower(3).
Definition: ctype.h:255
static int rb_isprint(int c)
Identical to rb_isgraph(), except it also returns true for ‘’ '`.
Definition: ctype.h:442
static int rb_isblank(int c)
Our own locale-insensitive version of isblank(3).
Definition: ctype.h:372
#define rb_define_method_id(klass, mid, func, arity)
Defines klass#mid.
Definition: cxxanyargs.hpp:673
#define rb_define_singleton_method(klass, mid, func, arity)
Defines klass.mid.
Definition: cxxanyargs.hpp:685
#define rb_define_protected_method(klass, mid, func, arity)
Defines klass#mid and makes it protected.
Definition: cxxanyargs.hpp:681
#define rb_define_private_method(klass, mid, func, arity)
Defines klass#mid and makes it private.
Definition: cxxanyargs.hpp:677
double rb_float_value(VALUE num)
Extracts its double value from an instance of rb_cFloat.
Definition: numeric.c:6418
VALUE rb_float_new_in_heap(double d)
Identical to rb_float_new(), except it does not generate Flonums.
Definition: numeric.c:1014
VALUE rb_float_new(double d)
Converts a C's double into an instance of rb_cFloat.
Definition: numeric.c:6425
void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data)
Registers an event hook function.
Definition: vm_trace.c:186
int rb_remove_event_hook(rb_event_hook_func_t func)
Removes the passed function from the list of event hooks.
Definition: vm_trace.c:294
void(* rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass)
Type of event hooks.
Definition: event.h:115
ruby_fl_ushift
This is an enum because GDB wants it (rather than a macro).
Definition: fl_type.h:162
@ RUBY_FL_USHIFT
Number of bits in ruby_fl_type that are not open to users.
Definition: fl_type.h:167
static VALUE RB_OBJ_FROZEN_RAW(VALUE obj)
This is an implenentation detail of RB_OBJ_FROZEN().
Definition: fl_type.h:906
static bool RB_OBJ_TAINTABLE(VALUE obj)
Definition: fl_type.h:788
static VALUE RB_FL_TEST(VALUE obj, VALUE flags)
Tests if the given flag(s) are set or not.
Definition: fl_type.h:527
static VALUE RB_FL_TEST_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_TEST().
Definition: fl_type.h:501
static bool RB_FL_ABLE(VALUE obj)
Checks if the object is flaggable.
Definition: fl_type.h:476
static bool RB_FL_ANY_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_ANY().
Definition: fl_type.h:550
static void rb_obj_freeze_inline(VALUE x)
Prevents further modifications to the given object.
Definition: fl_type.h:951
static bool RB_FL_ANY(VALUE obj, VALUE flags)
Identical to RB_FL_TEST(), except it returns bool.
Definition: fl_type.h:566
static void RB_FL_SET_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_SET().
Definition: fl_type.h:638
static bool RB_FL_ALL(VALUE obj, VALUE flags)
Identical to RB_FL_ANY(), except it mandates all passed flags be set.
Definition: fl_type.h:600
static bool RB_OBJ_FROZEN(VALUE obj)
Checks if an object is frozen.
Definition: fl_type.h:921
static bool RB_OBJ_TAINTED(VALUE obj)
Definition: fl_type.h:822
static VALUE RB_OBJ_TAINTED_RAW(VALUE obj)
Definition: fl_type.h:805
static void RB_OBJ_INFECT(VALUE dst, VALUE src)
Definition: fl_type.h:884
static void RB_FL_UNSET_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_UNSET().
Definition: fl_type.h:698
@ RUBY_FL_DUPPED
Definition: fl_type.h:439
static void RB_FL_SET(VALUE obj, VALUE flags)
Sets the given flag(s).
Definition: fl_type.h:658
static void RB_OBJ_INFECT_RAW(VALUE dst, VALUE src)
Definition: fl_type.h:868
static void RB_FL_REVERSE(VALUE obj, VALUE flags)
Reverses the flags.
Definition: fl_type.h:769
static void RB_FL_UNSET(VALUE obj, VALUE flags)
Clears the given flag(s).
Definition: fl_type.h:713
static void RB_OBJ_FREEZE_RAW(VALUE obj)
This is an implenentation detail of RB_OBJ_FREEZE().
Definition: fl_type.h:939
static void RB_FL_REVERSE_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_REVERSE().
Definition: fl_type.h:753
static bool RB_FL_ALL_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_ALL().
Definition: fl_type.h:584
@ RUBY_FL_PROMOTED1
This flag has something to do with our garbage collector.
Definition: fl_type.h:240
@ RUBY_ELTS_SHARED
This flag has something to do with data structures.
Definition: fl_type.h:405
@ RUBY_FL_USER9
User-defined flag.
Definition: fl_type.h:369
@ RUBY_FL_SINGLETON
This flag has something to do with an object's class.
Definition: fl_type.h:430
@ RUBY_FL_USER8
User-defined flag.
Definition: fl_type.h:368
@ RUBY_FL_USER11
User-defined flag.
Definition: fl_type.h:371
@ RUBY_FL_USER5
User-defined flag.
Definition: fl_type.h:365
@ RUBY_FL_TAINT
Definition: fl_type.h:278
@ RUBY_FL_USER3
User-defined flag.
Definition: fl_type.h:363
@ RUBY_FL_USER17
User-defined flag.
Definition: fl_type.h:377
@ RUBY_FL_USER10
User-defined flag.
Definition: fl_type.h:370
@ RUBY_FL_USER7
User-defined flag.
Definition: fl_type.h:367
@ RUBY_FL_WB_PROTECTED
Definition: fl_type.h:207
@ RUBY_FL_PROMOTED0
This flag has something to do with our garbage collector.
Definition: fl_type.h:223
@ RUBY_FL_USER14
User-defined flag.
Definition: fl_type.h:374
@ RUBY_FL_USER6
User-defined flag.
Definition: fl_type.h:366
@ RUBY_FL_USER16
User-defined flag.
Definition: fl_type.h:376
@ RUBY_FL_EXIVAR
This flag has something to do with instance variables.
Definition: fl_type.h:345
@ RUBY_FL_UNTRUSTED
Definition: fl_type.h:305
@ RUBY_FL_PROMOTED
This flag has something to do with our garbage collector.
Definition: fl_type.h:257
@ RUBY_FL_USER0
User-defined flag.
Definition: fl_type.h:360
@ RUBY_FL_FREEZE
This flag has something to do with data immutability.
Definition: fl_type.h:356
@ RUBY_FL_USER15
User-defined flag.
Definition: fl_type.h:375
@ RUBY_FL_SEEN_OBJ_ID
This flag has something to do with object IDs.
Definition: fl_type.h:332
@ RUBY_FL_USER2
User-defined flag.
Definition: fl_type.h:362
@ RUBY_FL_USER4
User-defined flag.
Definition: fl_type.h:364
@ RUBY_FL_USER18
User-defined flag.
Definition: fl_type.h:378
@ RUBY_FL_USER1
User-defined flag.
Definition: fl_type.h:361
@ RUBY_FL_SHAREABLE
This flag has something to do with Ractor.
Definition: fl_type.h:298
@ RUBY_FL_FINALIZE
This flag has something to do with finalisers.
Definition: fl_type.h:271
@ RUBY_FL_USER19
User-defined flag.
Definition: fl_type.h:380
@ RUBY_FL_USER13
User-defined flag.
Definition: fl_type.h:373
@ RUBY_FL_USER12
User-defined flag.
Definition: fl_type.h:372
static void RB_OBJ_TAINT_RAW(VALUE obj)
Definition: fl_type.h:837
static void RB_OBJ_TAINT(VALUE obj)
Definition: fl_type.h:852
int ruby_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg)
Identical to rb_glob(), except it returns opaque exception states instead of raising exceptions.
Definition: dir.c:2703
void rb_glob(const char *pattern, void(*func)(const char *path, VALUE arg, void *enc), VALUE arg)
The "glob" operator.
int ruby_brace_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg)
Identical to ruby_glob(), @shyouhei currently suspects.
Definition: dir.c:2843
int ruby_glob_func(const char *path, VALUE arg, void *enc)
Type of a glob callback function.
Definition: glob.h:49
void rb_include_module(VALUE klass, VALUE module)
Includes a module to a class.
Definition: class.c:1101
VALUE rb_define_class(const char *, VALUE)
Defines a top-level class.
Definition: class.c:896
void rb_extend_object(VALUE obj, VALUE module)
Extend the object with the module.
Definition: eval.c:1676
void rb_prepend_module(VALUE klass, VALUE module)
Identical to rb_include_module(), except it "prepends" the passed module to the klass,...
Definition: class.c:1356
VALUE rb_define_class_under(VALUE, const char *, VALUE)
Defines a class under the namespace of outer.
Definition: class.c:928
VALUE rb_define_module(const char *)
Defines a top-level module.
Definition: class.c:1006
VALUE rb_define_module_under(VALUE, const char *)
Defines a module under the namespace of outer.
Definition: class.c:1030
void rb_define_alias(VALUE, const char *, const char *)
Defines an alias of a method.
Definition: class.c:2208
void rb_define_module_function(VALUE module, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a module function for a module.
Definition: class.c:2192
void rb_need_block(void)
Declares that the current method needs a block.
Definition: eval.c:872
void rb_define_attr(VALUE, const char *, int, int)
Defines public accessor method(s) for an attribute.
Definition: class.c:2214
void rb_undef_method(VALUE, const char *)
Defines an undef of a method.
Definition: class.c:2030
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a method.
Definition: class.c:2006
int rb_keyword_given_p(void)
Determines if the current method is given a keyword argument.
Definition: eval.c:864
int rb_block_given_p(void)
Determines if the current method is given a block.
Definition: eval.c:851
void rb_define_global_function(const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a global function.
Definition: class.c:2202
void ruby_stop(int ex)
Calls ruby_cleanup() and exits the process.
Definition: eval.c:289
int ruby_exec_node(void *n)
Identical to ruby_run_node(), except it returns an opaque execution status.
Definition: eval.c:325
int ruby_setup(void)
Initializes the VM and builtin libraries.
Definition: eval.c:65
void ruby_finalize(void)
Runs the VM finalization processes.
Definition: eval.c:168
void ruby_init_stack(volatile VALUE *addr)
Set stack bottom of Ruby implementation.
void ruby_script(const char *name)
Sets the current script name to this value.
Definition: ruby.c:2495
void ruby_set_argv(int argc, char **argv)
Sets argv that ruby understands.
Definition: ruby.c:2610
void ruby_set_script_name(VALUE name)
Identical to ruby_script(), except it takes the name as a Ruby String instance.
Definition: ruby.c:2508
int ruby_cleanup(int ex)
Destructs the VM.
Definition: eval.c:176
size_t ruby_stack_length(VALUE **p)
Queries what Ruby thinks is the machine stack.
Definition: gc.c:6248
int ruby_stack_check(void)
Checks for stack overflow.
Definition: gc.c:6288
void ruby_init_loadpath(void)
Sets up $LOAD_PATH.
Definition: ruby.c:619
void * ruby_process_options(int argc, char **argv)
Identical to ruby_options(), except it raises ruby-level exceptions on failure.
Definition: ruby.c:2625
void ruby_prog_init(void)
Defines built-in variables.
Definition: ruby.c:2578
void ruby_sig_finalize(void)
Clear signal handlers.
Definition: signal.c:1497
void ruby_incpush(const char *path)
Appends the given path to the end of the load path.
Definition: ruby.c:458
void rb_notimplement(void)
Definition: error.c:3144
void rb_mod_sys_fail(VALUE mod, const char *mesg)
Identical to rb_sys_fail(), except it takes additional module to extend the exception object before r...
Definition: error.c:3280
rb_warning_category_t
Warning categories.
Definition: error.h:43
VALUE rb_eLocalJumpError
LocalJumpError exception.
Definition: eval.c:48
void rb_category_warn(rb_warning_category_t cat, const char *fmt,...)
Identical to rb_category_warning(), except it reports always regardless of runtime -W flag.
Definition: error.c:429
void rb_raise(VALUE exc, const char *fmt,...)
Exception entry point.
Definition: error.c:3101
void rb_compile_warn(const char *file, int line, const char *fmt,...)
Identical to rb_compile_warning(), except it reports always regardless of runtime -W flag.
Definition: error.c:361
void rb_category_warning(rb_warning_category_t cat, const char *fmt,...)
Identical to rb_warning(), except it takes additional "category" parameter.
Definition: error.c:461
void rb_mod_syserr_fail(VALUE mod, int e, const char *mesg)
Identical to rb_mod_sys_fail(), except it does not depend on C global variable errno.
Definition: error.c:3294
VALUE rb_rescue2(VALUE(*b_proc)(VALUE), VALUE data1, VALUE(*r_proc)(VALUE, VALUE), VALUE data2,...)
An equivalent of rescue clause.
Definition: eval.c:880
void rb_syserr_fail(int e, const char *mesg)
Raises appropriate exception that represents a C errno.
Definition: error.c:3213
void rb_bug(const char *fmt,...)
Interpreter panic switch.
Definition: error.c:803
void rb_iter_break(void)
Breaks from a block.
Definition: vm.c:1822
void rb_sys_fail(const char *mesg)
Converts a C errno into a Ruby exception, then raises it.
Definition: error.c:3225
VALUE rb_eZeroDivError
ZeroDivisionError exception.
Definition: numeric.c:194
void rb_readwrite_syserr_fail(enum rb_io_wait_readwrite waiting, int err, const char *msg)
Identical to rb_readwrite_sys_fail(), except it does not depend on C global variable errno.
Definition: io.c:14003
void rb_sys_warning(const char *fmt,...)
Identical to rb_sys_fail(), except it does not raise an exception to render a warning instead.
Definition: error.c:3362
VALUE rb_eIOError
IOError exception.
Definition: io.c:188
VALUE rb_syserr_new_str(int n, VALUE arg)
Identical to rb_syserr_new(), except it takes the message in Ruby's String instead of C's.
Definition: error.c:3207
void rb_mod_syserr_fail_str(VALUE mod, int e, VALUE mesg)
Identical to rb_mod_syserr_fail(), except it takes the message in Ruby's String instead of C's.
Definition: error.c:3301
void rb_set_errinfo(VALUE err)
Sets the current exception ($!) to the given value.
Definition: eval.c:1861
VALUE rb_eRegexpError
RegexpError exception.
Definition: re.c:30
void rb_syserr_fail_str(int e, VALUE mesg)
Identical to rb_syserr_fail(), except it takes the message in Ruby's String instead of C's.
Definition: error.c:3219
VALUE rb_eEOFError
EOFError exception.
Definition: io.c:187
VALUE rb_vrescue2(VALUE(*b_proc)(VALUE), VALUE data1, VALUE(*r_proc)(VALUE, VALUE), VALUE data2, va_list args)
Identical to rb_rescue2(), except it takes va_list instead of variadic number of arguments.
Definition: eval.c:891
void rb_fatal(const char *fmt,...)
Raises the unsung "fatal" exception.
Definition: error.c:3152
void rb_readwrite_sys_fail(enum rb_io_wait_readwrite waiting, const char *msg)
Raises appropriate exception using the parameters.
Definition: io.c:13997
void rb_iter_break_value(VALUE val)
Identical to rb_iter_break(), except it additionally takes the "value" of this breakage.
Definition: vm.c:1828
void rb_category_compile_warn(rb_warning_category_t cat, const char *file, int line, const char *fmt,...)
Identical to rb_compile_warn(), except it also accepts category.
Definition: error.c:390
VALUE * rb_ruby_verbose_ptr(void)
This is an implementation detail of ruby_verbose.
Definition: vm.c:4011
VALUE rb_eStopIteration
StopIteration exception.
Definition: enumerator.c:141
VALUE rb_eFloatDomainError
FloatDomainError exception.
Definition: numeric.c:195
void rb_warn(const char *fmt,...)
Identical to rb_warning(), except it reports always regardless of runtime -W flag.
Definition: error.c:419
void rb_bug_errno(const char *mesg, int errno_arg)
This is a wrapper of rb_bug() which automatically constructs appropriate message from the passed errn...
Definition: error.c:831
void rb_compile_warning(const char *file, int line, const char *fmt,...)
Issues a compile-time warning that happens at __file__:__line__.
Definition: error.c:376
VALUE rb_rescue(VALUE(*b_proc)(VALUE), VALUE data1, VALUE(*r_proc)(VALUE, VALUE), VALUE data2)
Identical to rb_rescue2(), except it does not take a list of exception classes.
Definition: eval.c:951
VALUE * rb_ruby_debug_ptr(void)
This is an implementation detail of ruby_debug.
Definition: vm.c:4018
VALUE rb_ensure(VALUE(*b_proc)(VALUE), VALUE data1, VALUE(*e_proc)(VALUE), VALUE data2)
An equivalent to ensure clause.
Definition: eval.c:980
VALUE rb_errinfo(void)
This is the same as $! in Ruby.
Definition: eval.c:1855
VALUE rb_eSysStackError
SystemStackError exception.
Definition: eval.c:49
VALUE rb_syserr_new(int err, const char *msg)
Creates an exception object that represents the given C errno.
Definition: error.c:3199
void rb_sys_fail_str(VALUE mesg)
Identical to rb_sys_fail(), except it takes the message in Ruby's String instead of C's.
Definition: error.c:3231
void rb_unexpected_type(VALUE x, int t)
Fails with the given object's type incompatibility to the type.
Definition: error.c:1030
void rb_mod_sys_fail_str(VALUE mod, VALUE mesg)
Identical to rb_mod_sys_fail(), except it takes the message in Ruby's String instead of C's.
Definition: error.c:3287
VALUE rb_eThreadError
ThreadError exception.
Definition: eval.c:869
void rb_exit(int status)
Terminates the current execution context.
Definition: process.c:4503
VALUE rb_eMathDomainError
Math::DomainError exception.
Definition: math.c:30
void rb_check_type(VALUE x, int t)
This was the old implementation of Check_Type(), but they diverged.
Definition: error.c:1007
void rb_warning(const char *fmt,...)
Issues a warning.
Definition: error.c:450
@ RB_WARN_CATEGORY_DEPRECATED
Warning is for deprecated features.
Definition: error.h:48
@ RB_WARN_CATEGORY_EXPERIMENTAL
Warning is for experimental features.
Definition: error.h:51
@ RB_WARN_CATEGORY_NONE
Category unspecified.
Definition: error.h:45
VALUE rb_cRational
Rational class.
Definition: rational.c:47
VALUE rb_cUnboundMethod
UnboundMethod class.
Definition: proc.c:46
VALUE rb_cTime
Time class.
Definition: time.c:647
VALUE rb_cDir
Dir class.
Definition: dir.c:458
VALUE rb_cComplex
Complex class.
Definition: complex.c:38
VALUE rb_cArray
Array class.
Definition: array.c:40
VALUE rb_mProcess
Process module.
Definition: process.c:8764
VALUE rb_mMath
Math module.
Definition: math.c:29
VALUE rb_cIO
IO class.
Definition: io.c:186
VALUE rb_mEnumerable
Enumerable module.
Definition: enum.c:27
VALUE rb_cMatch
MatchData class.
Definition: re.c:956
VALUE rb_cStruct
Struct class.
Definition: struct.c:31
VALUE rb_cEnumerator
Enumerator class.
Definition: enumerator.c:126
VALUE rb_cInteger
Module class.
Definition: numeric.c:192
VALUE rb_stdin
STDIN constant.
Definition: io.c:199
VALUE rb_cStat
File::Stat class.
Definition: file.c:176
VALUE rb_cBinding
Binding class.
Definition: proc.c:48
VALUE rb_cRegexp
Regexp class.
Definition: re.c:2459
VALUE rb_mGC
GC module.
Definition: gc.c:1151
VALUE rb_cHash
Hash class.
Definition: hash.c:92
VALUE rb_stderr
STDERR constant.
VALUE rb_cNumeric
Numeric class.
Definition: numeric.c:190
static VALUE rb_class_of(VALUE obj)
Object to class mapping function.
Definition: globals.h:172
VALUE rb_cRandom
Random class.
Definition: random.c:229
VALUE rb_cEncoding
Encoding class.
Definition: encoding.c:57
VALUE rb_cSymbol
Sumbol class.
Definition: string.c:80
VALUE rb_cThread
Thread class.
Definition: vm.c:401
VALUE rb_cRange
Range class.
Definition: range.c:31
VALUE rb_mFileTest
FileTest module.
Definition: file.c:175
VALUE rb_mWaitReadable
IO::WaitReadable module.
Definition: io.c:189
VALUE rb_mWaitWritable
IO::WaitReadable module.
Definition: io.c:190
VALUE rb_mComparable
Comparable module.
Definition: compar.c:19
VALUE rb_cFloat
Float class.
Definition: numeric.c:191
VALUE rb_cProc
Proc class.
Definition: proc.c:49
VALUE rb_cFile
File class.
Definition: file.c:174
VALUE rb_stdout
STDOUT constant.
VALUE rb_cString
String class.
Definition: string.c:79
VALUE rb_cMethod
Method class.
Definition: proc.c:47
int ruby_run_node(void *n)
Runs the given compiled source and exits this process.
Definition: eval.c:312
void ruby_init(void)
Calls ruby_setup() and check error.
Definition: eval.c:98
void * ruby_options(int argc, char **argv)
Processes command line arguments and compiles the Ruby source to execute.
Definition: eval.c:109
void ruby_show_copyright(void)
Prints the copyright notice of the CRuby interpreter to stdout.
Definition: version.c:145
void ruby_sysinit(int *argc, char ***argv)
Initializes the process for libruby.
Definition: ruby.c:2678
void ruby_show_version(void)
Prints the version information of the CRuby interpreter to stdout.
Definition: version.c:123
int ruby_executable_node(void *n, int *status)
Checks the return value of ruby_options().
Definition: eval.c:295
VALUE rb_eval_string_wrap(const char *str, int *state)
Identical to rb_eval_string_protect(), except it evaluates the given string under a module binding in...
Definition: vm_eval.c:1868
VALUE rb_funcall_passing_block(VALUE recv, ID mid, int argc, const VALUE *argv)
Identical to rb_funcallv_public(), except you can pass the passed block.
Definition: vm_eval.c:1165
VALUE rb_funcall(VALUE recv, ID mid, int n,...)
Calls a method.
Definition: vm_eval.c:1102
VALUE rb_funcallv_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat)
Identical to rb_funcallv(), except you can specify how to handle the last element of the given array.
Definition: vm_eval.c:1069
VALUE rb_funcallv(VALUE recv, ID mid, int argc, const VALUE *argv)
Identical to rb_funcall(), except it takes the method arguments as a C array.
Definition: vm_eval.c:1061
VALUE rb_funcall_with_block(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval)
Identical to rb_funcallv_public(), except you can pass a block.
Definition: vm_eval.c:1179
VALUE rb_eval_string_protect(const char *str, int *state)
Identical to rb_eval_string(), except it avoids potential global escapes.
Definition: vm_eval.c:1847
VALUE rb_call_super_kw(int argc, const VALUE *argv, int kw_splat)
Identical to rb_call_super(), except you can specify how to handle the last element of the given arra...
Definition: vm_eval.c:330
VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, const VALUE *argv)
Identical to rb_funcallv(), except it only takes public methods into account.
Definition: vm_eval.c:1153
VALUE rb_current_receiver(void)
This resembles ruby's self.
Definition: vm_eval.c:344
VALUE rb_funcall_passing_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat)
Identical to rb_funcallv_passing_block(), except you can specify how to handle the last element of th...
Definition: vm_eval.c:1172
VALUE rb_funcall_with_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval, int kw_splat)
Identical to rb_funcallv_with_block(), except you can specify how to handle the last element of the g...
Definition: vm_eval.c:1189
VALUE rb_eval_string(const char *str)
Evaluates the given string in an isolated binding.
Definition: vm_eval.c:1835
VALUE rb_call_super(int argc, const VALUE *argv)
This resembles ruby's super.
Definition: vm_eval.c:338
VALUE rb_funcallv_public_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat)
Identical to rb_funcallv_public(), except you can specify how to handle the last element of the given...
Definition: vm_eval.c:1159
void rb_gc_register_address(VALUE *valptr)
Inform the garbage collector that valptr points to a live Ruby object that should not be moved.
Definition: gc.c:8969
void rb_gc_unregister_address(VALUE *valptr)
Inform the garbage collector that a pointer previously passed to rb_gc_register_address() no longer p...
Definition: gc.c:8981
void rb_gc_register_mark_object(VALUE object)
Inform the garbage collector that object is a live Ruby object that should not be moved.
Definition: gc.c:8948
void rb_undef(VALUE mod, ID mid)
Inserts a method entry that hides previous method definition of the given name.
Definition: vm_method.c:1751
VALUE rb_class_descendants(VALUE klass)
Queries the class's descendants.
int rb_respond_to(VALUE obj, ID mid)
Queries if the object responds to the method.
Definition: vm_method.c:2799
VALUE(* rb_alloc_func_t)(VALUE klass)
This is the type of functions that ruby calls when trying to allocate an object.
Definition: vm.h:216
void rb_undef_alloc_func(VALUE klass)
Deletes the allocator function of a class.
Definition: vm_method.c:1151
const char * rb_sourcefile(void)
Resembles __FILE__.
Definition: vm.c:1609
void rb_alias(VALUE klass, ID dst, ID src)
Resembles alias.
Definition: vm_method.c:2134
int rb_method_basic_definition_p(VALUE klass, ID mid)
Well... Let us hesitate from describing what a "basic definition" is.
Definition: vm_method.c:2677
void rb_attr(VALUE klass, ID name, int need_reader, int need_writer, int honour_visibility)
This function resembles now-deprecated Module#attr.
Definition: vm_method.c:1714
void rb_remove_method(VALUE klass, const char *name)
Removes a method.
Definition: vm_method.c:1563
VALUE rb_check_funcall(VALUE recv, ID mid, int argc, const VALUE *argv)
Identical to rb_funcallv(), except it returns RUBY_Qundef instead of raising rb_eNoMethodError.
Definition: vm_eval.c:664
int rb_frame_method_id_and_class(ID *idp, VALUE *klassp)
Resembles __method__.
Definition: vm.c:2578
rb_alloc_func_t rb_get_alloc_func(VALUE klass)
Queries the allocator function of a class.
Definition: vm_method.c:1157
VALUE rb_check_funcall_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat)
Identical to rb_check_funcall(), except you can specify how to handle the last element of the given a...
Definition: vm_eval.c:658
VALUE rb_mod_module_eval(int argc, const VALUE *argv, VALUE mod)
Identical to rb_obj_instance_eval(), except it evaluates within the context of module.
Definition: vm_eval.c:2138
void rb_remove_method_id(VALUE klass, ID mid)
Identical to rb_remove_method(), except it accepts the method name as ID.
Definition: vm_method.c:1557
VALUE rb_mod_module_exec(int argc, const VALUE *argv, VALUE mod)
Identical to rb_obj_instance_exec(), except it evaluates within the context of module.
Definition: vm_eval.c:2172
void rb_define_alloc_func(VALUE klass, rb_alloc_func_t func)
Sets the allocator function of a class.
VALUE rb_obj_instance_exec(int argc, const VALUE *argv, VALUE recv)
Executes the given block within the context of the receiver.
Definition: vm_eval.c:2099
VALUE rb_eval_cmd_kw(VALUE cmd, VALUE arg, int kw_splat)
This API is practically a variant of rb_proc_call_kw() now.
Definition: vm_eval.c:1900
VALUE rb_f_notimplement(int argc, const VALUE *argv, VALUE obj, VALUE marker)
Raises rb_eNotImpError.
Definition: vm_method.c:360
VALUE rb_apply(VALUE recv, ID mid, VALUE args)
Identical to rb_funcallv(), except it takes Ruby's array instead of C's.
Definition: vm_eval.c:1077
VALUE rb_make_backtrace(void)
Creates the good old fashioned array-of-strings style backtrace info.
int rb_method_boundp(VALUE klass, ID id, int ex)
Queries if the klass has this method.
Definition: vm_method.c:1675
void rb_backtrace(void)
Prints the backtrace out to the standard error.
VALUE rb_obj_instance_eval(int argc, const VALUE *argv, VALUE recv)
Evaluates a string containing Ruby source code, or the given block, within the context of the receive...
Definition: vm_eval.c:2069
int rb_sourceline(void)
Resembles __LINE__.
Definition: vm.c:1623
int rb_obj_respond_to(VALUE obj, ID mid, int private_p)
Identical to rb_respond_to(), except it additionally takes the visibility parameter.
Definition: vm_method.c:2783
#define strtod(s, e)
Just another name of ruby_strtod.
Definition: util.h:212
#define strdup(s)
Just another name of ruby_strdup.
Definition: util.h:176
static unsigned int RB_FIX2UINT(VALUE x)
Converts a Fixnum into C's int.
Definition: int.h:208
unsigned long rb_num2uint(VALUE num)
Converts an instance of rb_cNumeric into C's unsigned long.
Definition: numeric.c:3296
long rb_fix2int(VALUE num)
Identical to rb_num2int().
Definition: numeric.c:3290
static int rb_num2int_inline(VALUE x)
Converts an instance of rb_cNumeric into C's int.
Definition: int.h:158
long rb_num2int(VALUE num)
Converts an instance of rb_cNumeric into C's long.
Definition: numeric.c:3284
static VALUE rb_uint2num_inline(unsigned int v)
Converts a C's unsigned int into an instance of rb_cInteger.
Definition: int.h:254
static int RB_FIX2INT(VALUE x)
Converts a Fixnum into C's int.
Definition: int.h:129
static unsigned int RB_NUM2UINT(VALUE x)
Converts an instance of rb_cNumeric into C's unsigned int.
Definition: int.h:185
static VALUE rb_int2num_inline(int v)
Converts a C's int into an instance of rb_cInteger.
Definition: int.h:239
unsigned long rb_fix2uint(VALUE num)
Identical to rb_num2uint().
Definition: numeric.c:3302
LONG_LONG rb_num2ll(VALUE num)
Converts an instance of rb_cNumeric into C's long long.
unsigned LONG_LONG rb_num2ull(VALUE num)
Converts an instance of rb_cNumeric into C's unsigned long long.
static VALUE rb_ull2num_inline(unsigned LONG_LONG n)
Converts a C's unsigned long long into an instance of rb_cInteger.
Definition: long_long.h:95
VALUE rb_ull2inum(unsigned LONG_LONG num)
Converts a C's unsigned long long into an instance of rb_cInteger.
static VALUE rb_ll2num_inline(LONG_LONG n)
Converts a C's long long into an instance of rb_cInteger.
Definition: long_long.h:82
VALUE rb_ll2inum(LONG_LONG num)
Converts a C's long long into an instance of rb_cInteger.
static LONG_LONG rb_num2ll_inline(VALUE x)
Converts an instance of rb_cNumeric into C's long long.
Definition: long_long.h:110
static unsigned LONG_LONG rb_num2ull_inline(VALUE x)
Converts an instance of rb_cNumeric into C's unsigned long long.
Definition: long_long.h:127
VALUE rb_int2inum(intptr_t i)
Converts a C's intptr_t into an instance of rb_cInteger.
Definition: bignum.c:3237
VALUE rb_uint2big(uintptr_t i)
Converts a C's intptr_t into an instance of rb_cInteger.
Definition: bignum.c:3187
VALUE rb_int2big(intptr_t i)
Converts a C's intptr_t into an instance of rb_cInteger.
Definition: bignum.c:3209
VALUE rb_uint2inum(uintptr_t i)
Converts a C's uintptr_t into an instance of rb_cInteger.
Definition: bignum.c:3230
VALUE rb_catch_obj(VALUE tag, rb_block_call_func_t func, VALUE data)
Identical to rb_catch(), except it catches arbitrary Ruby objects.
Definition: vm_eval.c:2401
VALUE rb_each(VALUE obj)
This is a shorthand of calling obj.each.
Definition: vm_eval.c:1657
VALUE rb_block_call(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2)
Identical to rb_funcallv(), except it additionally passes a function as a block.
Definition: vm_eval.c:1595
VALUE rb_yield_values(int n,...)
Identical to rb_yield(), except it takes variadic number of parameters and pass them to the block.
Definition: vm_eval.c:1369
VALUE rb_yield_splat(VALUE ary)
Identical to rb_yield_values(), except it splats an array to generate the list of parameters.
Definition: vm_eval.c:1403
void rb_throw(const char *tag, VALUE val)
Transfers control to the end of the active catch block waiting for tag.
Definition: vm_eval.c:2289
VALUE rb_yield_values2(int n, const VALUE *argv)
Identical to rb_yield_values(), except it takes the parameters as a C array instead of variadic argum...
Definition: vm_eval.c:1391
VALUE rb_yield(VALUE val)
Yields the block.
Definition: vm_eval.c:1357
VALUE rb_yield_values_kw(int n, const VALUE *argv, int kw_splat)
Identical to rb_yield_values2(), except you can specify how to handle the last element of the given a...
Definition: vm_eval.c:1397
VALUE rb_yield_block(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg))
Pass a passed block.
void rb_throw_obj(VALUE tag, VALUE val)
Identical to rb_throw(), except it allows arbitrary Ruby object to become a tag.
Definition: vm_eval.c:2264
VALUE rb_block_call_func(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg))
This is the type of a function that the interpreter expect for C-backended blocks.
Definition: iterator.h:83
VALUE rb_iterate(VALUE(*func1)(VALUE), VALUE data1, rb_block_call_func_t proc, VALUE data2)
Old way to iterate a block.
Definition: vm_eval.c:1569
VALUE rb_catch(const char *tag, rb_block_call_func_t func, VALUE data)
Executes the passed block and catches values thrown from inside of it.
Definition: vm_eval.c:2359
VALUE rb_block_call_kw(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2, int kw_splat)
Identical to rb_funcallv_kw(), except it additionally passes a function as a block.
Definition: vm_eval.c:1602
VALUE rb_yield_splat_kw(VALUE ary, int kw_splat)
Identical to rb_yield_splat(), except you can specify how to handle the last element of the given arr...
Definition: vm_eval.c:1416
static long rb_num2long_inline(VALUE x)
Converts an instance of rb_cNumeric into C's long.
Definition: long.h:267
static VALUE RB_INT2FIX(long i)
Converts a C's long into an instance of rb_cInteger.
Definition: long.h:111
static unsigned long rb_num2ulong_inline(VALUE x)
Converts an instance of rb_cNumeric into C's unsigned long.
Definition: long.h:293
static int rb_long2int_inline(long n)
Checks if int can hold the given integer.
Definition: long.h:135
static VALUE rb_ulong2num_inline(unsigned long v)
Converts a C's unsigned long into an instance of rb_cInteger.
Definition: long.h:323
static long rb_fix2long(VALUE x)
Converts a Fixnum into C's long.
Definition: long.h:231
void rb_out_of_int(SIGNED_VALUE num)
This is an utility function to raise an rb_eRangeError.
Definition: numeric.c:3211
long rb_num2long(VALUE num)
Converts an instance of rb_cNumeric into C's long.
Definition: numeric.c:3136
unsigned long rb_num2ulong(VALUE num)
Converts an instance of rb_cNumeric into C's unsigned long.
Definition: numeric.c:3205
static VALUE rb_long2num_inline(long v)
Converts a C's long into an instance of rb_cInteger.
Definition: long.h:308
static unsigned long rb_fix2ulong(VALUE x)
Converts a Fixnum into C's unsigned long.
Definition: long.h:252
static void * rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize)
This is an implementation detail of RB_ALLOCV_N().
Definition: memory.h:640
static int rb_mul_size_overflow(size_t a, size_t b, size_t max, size_t *c)
Definition: memory.h:525
VALUE type(ANYARGS)
ANYARGS-ed function type.
Definition: cxxanyargs.hpp:56
VALUE rb_newobj(void)
This is the implementation detail of RB_NEWOBJ.
Definition: gc.c:2826
void rb_copy_generic_ivar(VALUE clone, VALUE obj)
Copies the list of instance variables.
Definition: variable.c:1736
VALUE rb_newobj_of(VALUE klass, VALUE flags)
This is the implementation detail of RB_NEWOBJ_OF.
Definition: gc.c:2832
static long RARRAY_EMBED_LEN(VALUE ary)
Queries the length of the array.
Definition: rarray.h:297
void rb_ary_detransient(VALUE a)
Destructively converts an array of transient backend into ordinal one.
Definition: array.c:458
static long rb_array_len(VALUE a)
Queries the length of the array.
Definition: rarray.h:317
static bool RARRAY_TRANSIENT_P(VALUE ary)
Queries if the array is a transient array.
Definition: rarray.h:364
static int RARRAY_LENINT(VALUE ary)
Identical to rb_array_len(), except it differs for the return type.
Definition: rarray.h:343
static void RARRAY_ASET(VALUE ary, long i, VALUE v)
Assigns an object in an array.
Definition: rarray.h:590
static VALUE * RARRAY_PTR(VALUE ary)
Wild use of a C pointer.
Definition: rarray.h:570
@ RARRAY_EMBED_LEN_SHIFT
Where ::RARRAY_EMBED_LEN_MASK resides.
Definition: rarray.h:165
static VALUE RBASIC_CLASS(VALUE obj)
Queries the class of an object.
Definition: rbasic.h:152
@ RVALUE_EMBED_LEN_MAX
Max possible number of objects that can be embedded.
Definition: rbasic.h:55
int rb_big_sign(VALUE num)
The "sign" of a bignum.
Definition: bignum.c:6788
static bool RBIGNUM_NEGATIVE_P(VALUE b)
Checks if the bignum is negative.
Definition: rbignum.h:74
static bool RBIGNUM_POSITIVE_P(VALUE b)
Checks if the bignum is positive.
Definition: rbignum.h:61
VALUE rb_data_object_wrap(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
This is the primitive way to wrap an existing C struct into RData.
Definition: gc.c:2978
static VALUE rb_data_object_alloc(VALUE klass, void *data, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
Definition: rdata.h:367
static VALUE rb_data_object_make(VALUE klass, RUBY_DATA_FUNC mark_func, RUBY_DATA_FUNC free_func, void **datap, size_t size)
This is an implementation detail of Data_Make_Struct.
Definition: rdata.h:358
VALUE rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
Identical to rb_data_object_wrap(), except it allocates a new data region internally instead of takin...
Definition: gc.c:2986
void(* RUBY_DATA_FUNC)(void *)
This is the type of callbacks registered to RData.
Definition: rdata.h:108
static VALUE rb_obj_wb_unprotect(VALUE x, const char *filename, int line)
This is the implementation of RB_OBJ_WB_UNPROTECT().
Definition: rgengc.h:363
void rb_gc_writebarrier(VALUE old, VALUE young)
This is the implementation of RB_OBJ_WRITE().
Definition: gc.c:8721
void rb_gc_writebarrier_unprotect(VALUE obj)
This is the implementation of RB_OBJ_WB_UNPROTECT().
Definition: gc.c:8757
static bool RB_OBJ_PROMOTED(VALUE obj)
Tests if the object is "promoted" – that is, whether the object experienced one or more GC marks.
Definition: rgengc.h:343
static bool RB_OBJ_PROMOTED_RAW(VALUE obj)
This is the implementation of RB_OBJ_PROMOTED().
Definition: rgengc.h:323
VALUE rb_hash_set_ifnone(VALUE hash, VALUE ifnone)
This is the implementation detail of RHASH_SET_IFNONE.
Definition: hash.c:99
struct st_table * rb_hash_tbl(VALUE hash, const char *file, int line)
This is the implementation detail of RHASH_TBL.
Definition: hash.c:1621
size_t rb_hash_size_num(VALUE hash)
This is the implementation detail of RHASH_SIZE.
Definition: hash.c:2986
@ ROBJECT_EMBED_LEN_MAX
Max possible number of instance variables that can be embedded.
Definition: robject.h:84
static uint32_t ROBJECT_NUMIV(VALUE obj)
Queries the number of instance variables.
Definition: robject.h:145
static VALUE * ROBJECT_IVPTR(VALUE obj)
Queries the instance variables.
Definition: robject.h:171
static VALUE RREGEXP_SRC(VALUE rexp)
Convenient getter function.
Definition: rregexp.h:103
static char * RREGEXP_SRC_END(VALUE rexp)
Convenient getter function.
Definition: rregexp.h:163
static long RREGEXP_SRC_LEN(VALUE rexp)
Convenient getter function.
Definition: rregexp.h:144
static char * RREGEXP_SRC_PTR(VALUE rexp)
Convenient getter function.
Definition: rregexp.h:125
VALUE rb_str_export_locale(VALUE obj)
Identical to rb_str_export(), except it converts into the locale encoding instead.
Definition: string.c:1266
char * rb_string_value_cstr(volatile VALUE *ptr)
Identical to rb_string_value_ptr(), except it additionally checks for the contents for viability as a...
Definition: string.c:2575
static long RSTRING_EMBED_LEN(VALUE str)
Queries the length of the string.
Definition: rstring.h:423
static int RSTRING_LENINT(VALUE str)
Identical to RSTRING_LEN(), except it differs for the return type.
Definition: rstring.h:554
static char * RSTRING_END(VALUE str)
Queries the end of the contents pointer of the string.
Definition: rstring.h:528
VALUE rb_string_value(volatile VALUE *ptr)
Identical to rb_str_to_str(), except it fills the passed pointer with the converted object.
Definition: string.c:2459
static long RSTRING_LEN(VALUE str)
Queries the length of the string.
Definition: rstring.h:484
VALUE rb_str_export(VALUE obj)
Identical to rb_str_to_str(), except it additionally converts the string into default external encodi...
Definition: string.c:1260
char * rb_string_value_ptr(volatile VALUE *ptr)
Identical to rb_str_to_str(), except it returns the converted string's backend memory region.
Definition: string.c:2470
VALUE rb_str_to_str(VALUE obj)
Identical to rb_check_string_type(), except it raises exceptions in case of conversion failures.
Definition: string.c:1570
static char * RSTRING_PTR(VALUE str)
Queries the contents pointer of the string.
Definition: rstring.h:498
static long RSTRUCT_LEN(VALUE st)
Returns the number of struct members.
Definition: rstruct.h:94
static VALUE RSTRUCT_SET(VALUE st, int k, VALUE v)
Resembles Struct#[]=.
Definition: rstruct.h:104
static VALUE RSTRUCT_GET(VALUE st, int k)
Resembles Struct#[].
Definition: rstruct.h:114
VALUE rb_struct_aset(VALUE st, VALUE k, VALUE v)
Resembles Struct#[]=.
Definition: struct.c:1221
VALUE rb_struct_size(VALUE st)
Returns the number of struct members.
Definition: struct.c:1474
VALUE rb_struct_aref(VALUE st, VALUE k)
Resembles Struct#[].
Definition: struct.c:1183
static bool RTYPEDDATA_P(VALUE obj)
Checks whether the passed object is RTypedData or RData.
Definition: rtypeddata.h:540
VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *type)
This is the primitive way to wrap an existing C struct into RTypedData.
Definition: gc.c:2994
VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type)
Identical to rb_data_typed_object_wrap(), except it allocates a new data region internally instead of...
Definition: gc.c:3002
static VALUE rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)
Definition: rtypeddata.h:599
static VALUE rb_data_typed_object_make(VALUE klass, const rb_data_type_t *type, void **datap, size_t size)
While we don't stop you from using this function, it seems to be an implementation detail of TypedDat...
Definition: rtypeddata.h:590
static const struct rb_data_type_struct * RTYPEDDATA_TYPE(VALUE obj)
Queries for the type of given object.
Definition: rtypeddata.h:563
short rb_num2short(VALUE num)
Converts an instance of rb_cNumeric into C's short.
Definition: numeric.c:3340
unsigned short rb_num2ushort(VALUE num)
Converts an instance of rb_cNumeric into C's unsigned short.
Definition: numeric.c:3358
short rb_fix2short(VALUE num)
Identical to rb_num2short().
Definition: numeric.c:3349
unsigned short rb_fix2ushort(VALUE num)
Identical to rb_num2ushort().
Definition: numeric.c:3368
static short rb_num2short_inline(VALUE x)
Identical to rb_num2short().
Definition: short.h:105
static bool RB_STATIC_SYM_P(VALUE obj)
Checks if the given object is a static symbol.
static bool RB_TEST(VALUE obj)
Emulates Ruby's "if" statement.
static bool RB_FIXNUM_P(VALUE obj)
Checks if the given object is a so-called Fixnum.
static bool RB_IMMEDIATE_P(VALUE obj)
Checks if the given object is an immediate i.e.
static bool RB_SPECIAL_CONST_P(VALUE obj)
Checks if the given object is of enum ruby_special_consts.
static VALUE rb_special_const_p(VALUE obj)
Identical to RB_SPECIAL_CONST_P, except it returns a VALUE.
@ RUBY_Qtrue
@ RUBY_SPECIAL_SHIFT
Least significant 8 bits are reserved.
@ RUBY_FIXNUM_FLAG
Flag to denote a fixnum.
@ RUBY_Qnil
@ RUBY_FLONUM_MASK
Bit mask detecting a flonum.
@ RUBY_FLONUM_FLAG
Flag to denote a flonum.
@ RUBY_Qundef
Represents so-called undef.
@ RUBY_SYMBOL_FLAG
Flag to denote a static symbol.
@ RUBY_IMMEDIATE_MASK
Bit mask detecting special consts.
@ RUBY_Qfalse
static bool RB_NIL_P(VALUE obj)
Checks if the given object is nil.
static bool RB_FLONUM_P(VALUE obj)
Checks if the given object is a so-called Flonum.
static VALUE RB_ST2FIX(st_data_t i)
Converts a C's st_data_t into an instance of rb_cInteger.
Definition: st_data_t.h:59
const VALUE ary[RARRAY_EMBED_LEN_MAX]
Embedded elements.
struct RBasic basic
Basic part, including flags and class.
const VALUE shared_root
Parent of the array.
long capa
Capacity of *ptr.
long len
Number of elements of the array.
const VALUE * ptr
Pointer to the C array that holds the elements of the array.
Ruby's object's, base components.
Definition: rbasic.h:64
const VALUE klass
Class of an object.
Definition: rbasic.h:88
VALUE flags
Per-object flags.
Definition: rbasic.h:77
RUBY_DATA_FUNC dfree
This function is called when the object is no longer used.
void * data
Pointer to the actual C level struct that you want to wrap.
RUBY_DATA_FUNC dmark
This function is called when the object is experiencing GC marks.
struct RBasic basic
Basic part, including flags and class.
Ruby's File and IO.
struct RBasic basic
Basic part, including flags and class.
struct rb_io_t * fptr
IO's specific fields.
Ruby's ordinal objects.
struct st_table * iv_index_tbl
This is a table that holds instance variable name to index mapping.
struct RBasic basic
Basic part, including flags and class.
VALUE * ivptr
Pointer to a C array that holds instance variables.
uint32_t numiv
Number of instance variables.
VALUE ary[ROBJECT_EMBED_LEN_MAX]
Embedded instance variables.
Ruby's regular expression.
struct RBasic basic
Basic part, including flags and class.
const VALUE src
Source code of this expression.
struct re_pattern_buffer * ptr
The pattern buffer.
unsigned long usecnt
Reference count.
Ruby's String.
struct RBasic basic
Basic part, including flags and class.
long capa
Capacity of *ptr.
long len
Length of the string, not including terminating NUL character.
VALUE shared
Parent of the string.
char * ptr
Pointer to the contents of the string.
"Typed" user data.
const rb_data_type_t * type
This field stores various information about how Ruby should handle a data.
VALUE typed_flag
This has to be always 1.
void * data
Pointer to the actual C level struct that you want to wrap.
struct RBasic basic
The part that all ruby objects have in common.
This is the struct that holds necessary info for a struct.
size_t(* dsize)(const void *)
This function is to query the size of the underlying memory regions.
RUBY_DATA_FUNC dfree
This function is called when the object is no longer used.
void * data
Type-specific static data.
void * reserved[1]
This field is reserved for future extension.
RUBY_DATA_FUNC dcompact
This function is called when the object is relocated.
RUBY_DATA_FUNC dmark
This function is called when the object is experiencing GC marks.
const char * wrap_struct_name
Name of structs of this kind.
VALUE flags
Type-specific behavioural characteristics.
const rb_data_type_t * parent
Parent of this class.
Ruby's IO, metadata and buffers.
Definition: io.h:99
This is an implementation detail of rbimpl_size_mul_overflow().
Definition: st.c:133
uintptr_t VALUE
Type that represents a Ruby object.
Definition: value.h:40
static enum ruby_value_type rb_type(VALUE obj)
Identical to RB_BUILTIN_TYPE(), except it can also accept special constants.
Definition: value_type.h:224
static enum ruby_value_type RB_BUILTIN_TYPE(VALUE obj)
Queries the type of the object.
Definition: value_type.h:181
static bool RB_FLOAT_TYPE_P(VALUE obj)
Queries if the object is an instance of rb_cFloat.
Definition: value_type.h:263
static bool RB_SYMBOL_P(VALUE obj)
Queries if the object is an instance of rb_cSymbol.
Definition: value_type.h:306
static void Check_Type(VALUE v, enum ruby_value_type t)
Identical to RB_TYPE_P(), except it raises exceptions on predication failure.
Definition: value_type.h:432
static bool rb_integer_type_p(VALUE obj)
Queries if the object is an instance of rb_cInteger.
Definition: value_type.h:203
static bool RB_DYNAMIC_SYM_P(VALUE obj)
Queries if the object is a dynamic symbol.
Definition: value_type.h:286
static bool RB_TYPE_P(VALUE obj, enum ruby_value_type t)
Queries if the given object is of given type.
Definition: value_type.h:375
@ RUBY_T_SYMBOL
Definition: value_type.h:134
@ RUBY_T_MATCH
Definition: value_type.h:127
@ RUBY_T_MODULE
Definition: value_type.h:117
@ RUBY_T_ICLASS
Hidden classes known as IClasses.
Definition: value_type.h:140
@ RUBY_T_MOVED
Definition: value_type.h:142
@ RUBY_T_FIXNUM
Integers formerly known as Fixnums.
Definition: value_type.h:135
@ RUBY_T_IMEMO
Definition: value_type.h:138
@ RUBY_T_NODE
Definition: value_type.h:139
@ RUBY_T_OBJECT
Definition: value_type.h:115
@ RUBY_T_DATA
Definition: value_type.h:126
@ RUBY_T_FALSE
Definition: value_type.h:133
@ RUBY_T_UNDEF
Definition: value_type.h:136
@ RUBY_T_COMPLEX
Definition: value_type.h:128
@ RUBY_T_STRING
Definition: value_type.h:119
@ RUBY_T_HASH
Definition: value_type.h:122
@ RUBY_T_NIL
Definition: value_type.h:131
@ RUBY_T_CLASS
Definition: value_type.h:116
@ RUBY_T_ARRAY
Definition: value_type.h:121
@ RUBY_T_MASK
Bitmask of ruby_value_type.
Definition: value_type.h:144
@ RUBY_T_RATIONAL
Definition: value_type.h:129
@ RUBY_T_ZOMBIE
Definition: value_type.h:141
@ RUBY_T_BIGNUM
Definition: value_type.h:124
@ RUBY_T_TRUE
Definition: value_type.h:132
@ RUBY_T_FLOAT
Definition: value_type.h:118
@ RUBY_T_STRUCT
Definition: value_type.h:123
@ RUBY_T_NONE
Non-object (swept etc.)
Definition: value_type.h:113
@ RUBY_T_REGEXP
Definition: value_type.h:120
@ RUBY_T_FILE
Definition: value_type.h:125
void * ruby_xrealloc(void *ptr, size_t newsiz)
Resize the storage instance.
Definition: gc.c:14191
void * ruby_xrealloc2(void *ptr, size_t newelems, size_t newsiz)
Identical to ruby_xrealloc(), except it resizes the given storage instance to newelems * newsiz bytes...
Definition: gc.c:14201
void ruby_xfree(void *ptr)
Deallocates a storage instance.
Definition: gc.c:12226
void * ruby_xmalloc2(size_t nelems, size_t elemsiz)
Identical to ruby_xmalloc(), except it allocates nelems * elemsiz bytes.
Definition: gc.c:14171
void * ruby_xmalloc(size_t size)
Allocates a storage instance.
Definition: gc.c:14161
void * ruby_xcalloc(size_t nelems, size_t elemsiz)
Identical to ruby_xmalloc2(), except it returns a zero-filled storage instance.
Definition: gc.c:14181